參數
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)的形式調用它,無論它的參數是如何定義的。