1. 程式人生 > >python 當函式的形參預設值為可變物件時

python 當函式的形參預設值為可變物件時

強調一點,函式形參的預設值只計算一次,發生在函式定義域定義的時候。

例如:

i = 5
def f(arg=i):
    print arg

i = 6
f()

以上程式碼將列印5而不是6.

 

再看一個比較明顯的例子,當預設引數為可變的物件如列表、字典或大部分類的例項時:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

將輸出以下結果:

[1]
[1, 2]
[1, 2, 3]

這是因為定義函式的時候,變數L指向了一片記憶體地址,在後面的反覆呼叫過程中L始終指向同一片記憶體地址,append的操作都在對同一個列表進行操作。如果這不是你想要的結果,可以試試下面這種寫法:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L