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)
添加回答
举报