有时,使用一个空列表作为默认参数似乎很自然。然而,Python 在这些情况下会产生意想不到的行为。例如,考虑这个函数:def my_func(
有时,使用一个空列表作为默认参数似乎很自然。然而, Python 在这些情况下会产生意想不到的行为。 .
例如,考虑这个函数:
def my_func(working_list=[]):
working_list.append("a")
print(working_list)
第一次调用时,默认设置会起作用,但之后的调用将更新现有列表( "a"
每次调用一个)并打印更新后的版本。
我如何修复该函数,以便在没有明确参数的情况下重复调用它时,每次都使用一个新的空列表?
已经提供了好的和正确的答案。我只是想给出另一种语法来写你想要做的事情,当你想创建一个带有默认空列表的类时,我发现这种语法更漂亮:
class Node(object):
def __init__(self, _id, val, parents=None, children=None):
self.id = _id
self.val = val
self.parents = parents if parents is not None else []
self.children = children if children is not None else []
此代码片段使用了 if else 运算符语法。我特别喜欢它,因为它是一行简洁的语句,没有冒号等,读起来几乎像一个正常的英语句子。:)
在你的情况下你可以写
def myFunc(working_list=None):
working_list = [] if working_list is None else working_list
working_list.append("a")
print working_list