为什么python中的默认值只评估一次

时间:2017-05-09 04:51:45

标签: python python-2.7 python-3.x

如果我像这样定义默认列表参数:

def foo(a, my_list=[]):
    my_list.append(a)
    return my_list

然后每次连续调用foo()而不传递默认参数都会将元素附加到这个“隐藏”列表中,该列表似乎在调用之间持续存在。

print(foo('a'))
print(foo('b'))
print(foo('c'))

打印:

['a']
['a', 'b']
['a', 'b', 'c']

为什么会这样?这看起来像一个反模式。为了避免这种情况,我必须添加以下技巧:

def foo(a, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(a)
    return my_list

1 个答案:

答案 0 :(得分:0)

这实际上是因为,函数实际上是对象。 看一下这个解释很清楚:http://effbot.org/zone/default-values.htm