函数默认参数为[]的时候,多次调用会有什么结果?
参考答案:
在Python中,如果一个函数的默认参数是可变对象(例如列表、字典等),那么当这个参数被修改时,这种修改会在后续的函数调用中保留下来。这是因为默认参数只会被计算一次,然后就被缓存下来,后续的函数调用会重复使用这个缓存的值。
举个例子,假设我们有一个函数,它的默认参数是一个空列表:
def foo(x, bar=[]):
bar.append(x)
return bar
当我们第一次调用这个函数时,它会如我们期望的那样工作:
print(foo(1)) # 输出: [1]
但是,如果我们再次调用这个函数,并传入一个新的参数,我们可能会期望得到一个只包含新参数的新列表,但实际上,由于默认参数已经被缓存,所以新参数会被添加到之前的列表中:
print(foo(2)) # 输出: [1, 2]
这种情况可能会导致一些难以追踪的错误,因为它违反了我们对函数默认参数行为的期望。为了避免这种情况,我们通常应该避免使用可变对象作为函数的默认参数。如果确实需要使用可变对象,可以在函数内部创建一个新的实例:
def foo(x, bar=None):
if bar is None:
bar = []
bar.append(x)
return bar
这样,每次调用函数时都会创建一个新的列表,从而避免了上述问题。