Python中带有列表附加的可选参数

Python中带有列表附加的可选参数,python,optional-parameters,Python,Optional Parameters,可能重复: 这很奇怪,Python中的可选列表参数在使用.append()方法时在函数调用之间是持久的 输出: [] some thing ['hey'] ['hey'] # This should not happen unless the fields value was kept some thing ['hey'] 当“字段”列表是一个参数时,为什么它包含“嘿”?我知道它是本地范围,因为我无法在函数外部访问它,但函数会记住它的值。默认值只计算一次,因此使用可变类型作为默认值将产生意外

可能重复:

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

输出:

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

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

默认值只计算一次,因此使用可变类型作为默认值将产生意外结果。你最好这样做:

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

默认值只计算一次,因此使用可变类型作为默认值将产生意外结果。你最好这样做:

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

请注意,如果您曾经调用
wtf('some','thing',something)
,这将不会节省您的时间。现在,
某物
的末尾有一个额外的
“嘿”
。怎么回事?如果“某物”是一个列表,那么它就不是无,因此“字段”将等于“某物”,不是吗?请注意,如果您调用
wtf('some','thing',something)
,这将不会节省您的时间。现在,
某物
的末尾有一个额外的
“嘿”
。怎么回事?如果“某物”是一个列表,那么它就不会是无,因此“字段”将等于“某物”,不是吗?