天天看點

python參數

參數

python的函數具有很靈活的參數形式,可以是:

位置參數(最常見的參數,可以使用tuple代替),

預設參數(給預設值),

可變參數(參數的個數可以改變,傳入的其實是list或者tuple),

關鍵字參數(傳入的其實是dict)。

位置參數

#參數
#位置參數 預設參數
#計算x的n次方
def power(x,n=2):
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
print(power(3))
》9

print(power(4,4))
》256      

預設參數

#預設參數 小心有坑
def add_end(L=[]):
    L.append('end')
    print( L)
add_end()
》['end']

add_end()
》['end', 'end']      

這裡第二次調用方法的時候輸出不再是['end']而是['end', 'end']

定義預設參數要牢記一點:預設參數必須指向不變對象!
      

要修改上面的例子,我們可以用

None

這個不變對象來實作:

def add_end(L=None):
    if L is None:
        L=[]
    L.append('end')
    print( L)
add_end()
》['end']

add_end()
》['end']      

這樣無論調用多少次都輸出['end']

可變參數

在參數前面加一個星号*,函數内部參數接受到的是一個tuple

#可變參數
#計算a2 + b2 + c2 + ……
def calc(*arg):
    sum=0
    for n in arg:
        sum=sum+n*n
    return sum
print(calc(1,2,3,4))
》30      

也可以直接把一個list或者tuple的元素變成可變參數傳進去,在變量前面加一個星号*

#把list或者tuple做可變參數
num=list(range(1,4))
print(calc(*num))
》14      

關鍵字參數

參數可以是0個或任意帶參數名的參數,這些參數在函數内部自動組成為一個dict

#關鍵字參數
def person(name,age,**kw):
    print('name:',name,' age:',age,'other:',kw)
person('Peter',35)
》name: Peter  age: 35 other: {}

person('Peter',35,city='SH',sex='F')
》name: Peter  age: 35 other: {'city': 'SH', 'sex': 'F'}

#把dict做關鍵字參數
extra={'city':'SH','job':'Engineer'}
person('Peter',35,**extra)
》name: Peter  age: 35 other: {'city': 'SH', 'job': 'Engineer'}      

要注意定義可變參數和關鍵字參數的文法:

*args

是可變參數,args接收的是一個tuple;

**kw

是關鍵字參數,kw接收的是一個dict。

可變參數既可以直接傳入:

func(1, 2, 3)

,又可以先組裝list或tuple,

再通過

*args

傳入:

func(*(1, 2, 3))

關鍵字參數既可以直接傳入:

func(a=1, b=2)

,又可以先組裝dict,

**kw

func(**{'a': 1, 'b': 2})

請注意:

參數定義的順序必須是:必選參數、預設參數、可變參數、命名關鍵字參數和關鍵字參數。

對于任意函數,都可以通過類似func(*args, **kw)的形式調用它,無論它的參數是如何定義的。