剛在群里一個(gè)人問(wèn)的問(wèn)題,前兩天正好看過(guò),記錄一下。
__author__ = 'chenyu'

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

def f2(i,L=None):
if L is None:
L = []
L.append(i)
return L

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


print f2(1)
print f2(2)
print f2(3)輸出:
[1]
[1, 2]
[1, 2, 3]
[1]
[2]
[3]按照預(yù)想的結(jié)果f()輸出的應(yīng)該是[1],[2],[3],但是每次上次的結(jié)果都被保留下來(lái)了。
造成這樣的原因是python支持函數(shù)中的參數(shù)默認(rèn)值是一個(gè)可變的list, 函數(shù)體內(nèi)修改了原來(lái)的默認(rèn)值,而python會(huì)將修改后的值一直保留,并作為下次函數(shù)調(diào)用時(shí)的參數(shù)默認(rèn)值。
__author__ = 'chenyu'
def f(i,L=[]):
L.append(i)
return L
def f2(i,L=None):
if L is None:
L = []
L.append(i)
return L
print f(1)
print f(2)
print f(3)

print f2(1)
print f2(2)
print f2(3)
[1]
[1, 2]
[1, 2, 3]
[1]
[2]
[3]造成這樣的原因是python支持函數(shù)中的參數(shù)默認(rèn)值是一個(gè)可變的list, 函數(shù)體內(nèi)修改了原來(lái)的默認(rèn)值,而python會(huì)將修改后的值一直保留,并作為下次函數(shù)調(diào)用時(shí)的參數(shù)默認(rèn)值。


