關鍵字引數與非關鍵字引數(可變引數)詳解

pythontab發表於2012-12-24
學過php或者其他語言的同學都知道,php裡面的引數不是個數不是可變的(只是很多時候是可以省略的,因為在函式定義的時候為引數設定了預設值)。但是在python裡卻不是這樣,python裡面執行可變引數的出現,引數中出現(*arg,**arg2)的形式。

今天我們來詳解一下這種用法:

例如:

def foo1(arg1,arg2,key1=1,key2=2,*arg,**keywords):
    print "arg1 parameters is ",arg1
    print "arg2 parameters is ",arg2
    print "key1 parameter is ",key1
    print "key2 parameter is ",key2
    print "Arbitrary parameter is ", arg
    print "keywords parameter is ",keywords

foo1(1,2,3,4,5,6,k1=1,k2=2,k3=3)

輸出:

arg1 parameters is  1
arg2 parameters is  2
key1 parameter is  3
key2 parameter is  4
arg parameter is  (5, 6)
keywords parameter is  {'k3': 3, 'k2': 2, 'k1': 1}

函式引數分為四部分:
arg1,arg2,key1,key2普通引數
*arg 非關鍵字引數列表
**keywords 關鍵字引數列表

函式聲名部分,引數的四個部分不可顛倒位置,可以沒有其中某幾部分。

python函式的這種特性使得函式引數更加靈活,引數個數也不受限制。

注意:這種用法常用在python的裝飾器中,至於什麼是裝飾器,它是python裡面非常重要的一個特性,我會在以後詳解

相關文章