Python 預設引數
阿新 • • 發佈:2021-12-08
目錄
。
一、問題
定義有預設引數的函式。
二、解決方案
def test(a, b=2):
print(a, b)
test(1)
test(1, 3)
輸出:
1 2
1 3
預設引數是可修改的容器,如:列表、字典、集合,可以用 None 作為預設值。
def test(a, b=None):
if b is None:
b = []
...
並不想提供一個預設值,僅測試預設引數是不是傳進來。
測試引數是否被傳遞進來,不能 None、0、False值,因為這些值都是合法的,需要建立一個獨一無二的私有物件例項。如:object 類的例項 object()
_no_value = object()
def test(a, b=_no_value):
if b is _no_value:
print('b值沒有傳進來。')
else:
print(b)
test(1)
test(1, None)
輸出:
b值沒有傳進來。
None
傳遞一個 None 值和不傳值兩種情況不同。
三、討論
預設引數的值僅在函式定義的時候賦值一次。
x = 2
def test(a, b=x):
print(a, b)
test(1)
x = 3
test(1)
輸出:
1 2
1 2
改變 x 的值對預設引數值沒影響,因為在函式定義的時候已經確定了它的預設值。
預設引數的值是不可改變的物件。
def test(a, b=[]):
return b
t = test(1)
print(t)
t.append(2)
t.append('wangke')
print(t)
輸出:
[]
[2, 'wangke']
上面示例,b 的預設值是可改變物件,對 b 進行修改,下次呼叫這個函式預設值會改變。
為避免這種情況,將預設值設為 None。