天天看點

Python初學者 - 函數預設值

我剛才從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]