有时,使用一个空列表作为默认参数似乎很自然。然而,Python 在这些情况下会产生意想不到的行为。例如,考虑这个函数:def my_func(
有时,使用一个空列表作为默认参数似乎很自然。然而, Python 在这些情况下会产生意想不到的行为。 .
例如,考虑这个函数:
def my_func(working_list=[]):
working_list.append("a")
print(working_list)
第一次调用时,默认设置会起作用,但之后的调用将更新现有列表( "a"
每次调用一个)并打印更新后的版本。
我如何修复该函数,以便在没有明确参数的情况下重复调用它时,每次都使用一个新的空列表?
我可能有点跑题了,但请记住,如果你只想传递可变数量的参数,那么 Python 风格的方法是传递一个元组 *args
或一个字典 **kargs
。这些都是可选的,比语法更好 myFunc([1, 2, 3])
.
如果你想传递一个元组:
def myFunc(arg1, *args):
print args
w = []
w += args
print w
>>>myFunc(1, 2, 3, 4, 5, 6, 7)
(2, 3, 4, 5, 6, 7)
[2, 3, 4, 5, 6, 7]
如果你想传递一本字典:
def myFunc(arg1, **kargs):
print kargs
>>>myFunc(1, option1=2, option2=3)
{'option2' : 2, 'option1' : 3}