3 回答

TA貢獻1875條經驗 獲得超5個贊
解決方法是:
def foo(x=None):
if x is None:
x = []
# do stuff
您可以在此處閱讀更多內容 http://effbot.org/zone/default-values.htm

TA貢獻1796條經驗 獲得超10個贊
由于默認值是對默認值的引用,因此并非每次都創建默認值。因此,如果您運行這樣的示例:
def f(x=[]):
x.append(1)
return x
print(f()) #prints [1]
print(f()) #prints [1,1]
解決方法是使用不可變的元組并將其轉換為列表:
def f(x=()):
if not isinstance(x, list):
input = list(x)
else:
input = x
input.append(1)
return input
print(f()) #[1]
print(f()) #[1]
這樣它就可以工作了

TA貢獻1898條經驗 獲得超8個贊
當您使用可變對象作為默認值時,這里會出現混淆。在這里,tuple1 只是在每次調用函數時添加到列表中。以下是一個解決方法:
def subStringMatchExact(target, key, counter=0, tuple1=None):
if tuple1 == None:
tuple1 = []
if len(target) < len(key):
return tuple1
else:
counter += 1
if target[:len(key)] == key:
tuple1.append(counter-1)
return subStringMatchExact(target[1:], key, counter, tuple1)
添加回答
舉報