可能的重复:为什么“可变的默认参数修复”语法是如此丑陋,在python中询问python newbie最少的惊讶:可变的默认参数
这是一个例子 .
def list_as_default(arg = []): pass
来自:http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html
默认值仅计算一次 . 当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会产生差异 . 例如,以下函数会累积在后续调用中传递给它的参数:
def f(a, L=[]): L.append(a) return L print f(1) print f(2) print f(3)
这将打印出来
[1] [1, 2] [1, 2, 3]
如果您不希望在后续调用之间共享默认值,则可以编写如下函数:
def f(a, L=None): if L is None: L = [] L.append(a) return L
1 回答
来自:http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html
默认值仅计算一次 . 当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会产生差异 . 例如,以下函数会累积在后续调用中传递给它的参数:
这将打印出来
如果您不希望在后续调用之间共享默认值,则可以编写如下函数: