def myfunc(l=[]):
if not l:
l[:] = otherlist
前面的代码片段完全将列表
l
重新分配给存储在变量otherlist
中的任何列表,并在myfunc
的函数调用中维护该值。
def myfunc(d={}):
d.clear()
for k, v in otherd.items():
d[k] = v
对于此示例,假设字典
otherd
在函数调用的范围内,只是没有明确提供。
有没有一种方法可以比提供的示例中直接重新分配更简单的方式完全重新分配字典
d
?
注:
默认可变值是在第一次调用函数时初始化并存储的值。当变异时,它会在函数调用之间维持该状态,因此当访问时,它将返回其最新状态而不是初始状态。
def myfunc(d={}):
d.clear()
d.update(otherd)
应该可以解决问题。也就是说,可变的默认参数值通常不是一个好主意。您可能知道这一点,并且这是故意的。如果没有,替代方案可能是
import copy
def myfunc(d=None):
d = d or copy.copy(otherd) # or copy.deepcopy, if you will.