#函數參數的默認值只會執行一次
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
對於這個函數而言,在調用的時候沒有傳遞第二個參數,則由於函數參數的默認值只會執行一次,即初始化L = []一次,
L被賦予了列表對象的一個內存空間,地址不可變,由於列表可變的特性,每次調用只會在原來的列表上追加,並不會創建
新的列表。
輸出結果:
[1]
[1, 2]
[1, 2, 3]
def _f(a, L = None):
if L is None:
L = []
L.append(a)
return L
print(_f(1))
print(_f(2))
print(_f(3))
對於這個函數來說,參數初始化的時候,默認值只會執行一次,可以假設L指向內存的0號空間,不管后面怎么改變賦值,
接下來再調用這個函數的時候L都會指向0號空間。
輸出結果:
[1]
[2]
[3]