【发布时间】:2010-09-26 20:32:40
【问题描述】:
有时,有一个空列表的默认参数似乎很自然。然而Python produces unexpected behavior in these situations。
例如,如果我有一个函数:
def my_func(working_list=[]):
working_list.append("a")
print(working_list)
第一次调用时,默认值会起作用,但之后的调用会更新现有列表(每次调用一个"a")并打印更新的版本。
那么,获得我想要的行为的 Pythonic 方法是什么(每次调用都有一个新列表)?
【问题讨论】:
-
同样的行为也发生在集合上,尽管你需要一个稍微复杂一点的例子才能让它显示为一个错误。
-
由于链接失效,让我明确指出这是所需的行为。默认变量在函数定义时进行评估(第一次调用时),而不是每次调用函数时。因此,如果你改变一个可变的默认参数,任何后续的函数调用都只能使用改变的对象。
标签: python