我剛才從C++/Java/JS轉過來學習Python的,看Python自帶的的文檔,當學習到函數預設值時,對下面的兩個例子疑惑不解,以我以前語言學習的經驗,還真很難了解。
def f(a, L=[]):
L.append(a)
return L
print(f(1)) #output: [1]
print(f(2)) #output: [1, 2]
print(f(3)) #output: [1, 2, 3]
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
print(f(1)) #output: [1]
print(f(2)) #output: [2]
print(f(3)) #output: [3]
文檔中說函數的預設值隻會估值一次,是在執行def語句的時候。後來仔細思考了一下,如果将上面的兩個函數寫成這樣,就好了解多了。注意:這裡的L == null不是真正的Python代碼,隻是一些僞代碼,來幫助了解而已。
defaultVal = []
def f(a, L):
if L == null:
L = defaultVal
L.append(a)
return L
print(f(1)) #output: [1]
print(f(2)) #output: [1, 2]
print(f(3)) #output: [1, 2, 3]
defaultVal = None
def f(a, L):
if L == null:
L = defaultVal
if L is None:
L = []
L.append(a)
return L
print(f(1)) #output: [1]
print(f(2)) #output: [2]
print(f(3)) #output: [3]