带有List Append的Python中的可选参数

时间:2011-10-15 06:07:27

标签: python optional-parameters

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

这很奇怪,使用.append()方法时,Python中的可选列表参数在函数调用之间是持久的。

def wtf(some, thing, fields=[]):
    print fields
    if len(fields) == 0:
        fields.append('hey');
    print some, thing, fields

wtf('some', 'thing')
wtf('some', 'thing')

输出:

[]
some thing ['hey']
['hey'] # This should not happen unless the fields value was kept
some thing ['hey']

为什么“字段”列表在参数时包含“嘿”?我知道它是本地范围,因为我无法在函数外部访问它,但函数会记住它的值。

1 个答案:

答案 0 :(得分:3)

默认值仅评估一次,因此使用可变类型作为默认值将产生意外结果。你最好做这样的事情:

def wtf(some, thing, fields = None):
  if fields is None:
    fields = []