1.前言
Python中函數的參數類型比較豐富,比如我們經常見到*args
和**kwargs
作為參數。初學者遇到這個多少都有點懵逼,今天我們來把Python中的函數參數進行分析和總結。
2.Python 中的函數參數
在Python中定義函數參數有5種類型,我們來一一演示它們。
2.1必選參數
必須參數是最基本的參數類型,當你在Python函數中定義一個必選參數時,每次調用都必須給予賦值,否則將報錯。
>>>def fun(a): print("a=",a) >>>fun('felord.cn')a= felord.cn>>>fun()Traceback (most recent call last): File "<input>", line 1, in <module>TypeError: fun() missing 1 required positional argument: 'a'
2.2默認參數
默認參數就是擁有一個默認值的參數。
>>>def fun(a="felord.cn"): print("a=",a) >>>fun()a= felord.cn>>>fun("Felordcn")a= Felordcn
我們來看看下面這種情況:
>>>def fun(a=[]): a.append("foo") print("a=",a) >>>fun()a= ['foo']>>>fun()a= ['foo', 'foo']>>>fun()a= ['foo', 'foo', 'foo']
這是什么情況?每次調用參數a
都“記憶”了原來的值,這是因為Python函數在定義的時候,默認參數a
的值就被初始化為[]
,其實a
也是一個變量,它指向對象[]
,每次調用該函數改變a
的值則會改變a
指針指向的對象的值。當你將a
的默認值定義為一個不可變對象時就不會發生這種情況,你可以試試我說的。
所以,定義默認參數要牢記一點:默認參數必須指向不變對象!
2.3可變參數
有很多場景我們不確定參數的個數,也就是說參數是可變的。首先你可能會想到使用list
或者tuple
(元組)來封裝多個參數,但是如何才能從函數的語義上看出這是一個可變參數呢?所以我們通過一個前綴標識*
來聲明該參數是一個可變參數,通常記作*args
,你也可以記作*params
。args
會把所有的參數收納成一個tuple
。我們來演示一個求和的函數:
>>>def calc(*args): total=0 for i in args: total+=i return total >>>calc(1)1>>>calc(1,2,3,4,5)15>>>calc()0
2.4關鍵字參數
關鍵字參數也是實現任意個數參數的一種方式,區別在于可變參數收納為一個tuple
而關鍵字參數將我們傳入參數的參數名和對應的值收納為一個dict
(字典)。通常記作**kwargs
以區別于可變參數,實際上kw
就是keyword
新聞熱點
疑難解答