如何更简洁地重新赋值Python函数默认可变参数中的字典?
更简洁的字典重新赋值方法
首先回顾问题中的示例代码:
列表示例
def myfunc(l=[]): if not l: l[:] = otherlist
这段代码通过切片赋值,将列表l替换为otherlist的内容,同时利用Python默认可变参数的特性(首次调用时初始化,修改后状态会在多次调用间保留),让l的状态持续保留。
字典示例
原代码通过清空字典后循环赋值的方式更新:
def myfunc(d={}): d.clear() for k, v in otherd.items(): d[k] = v
更简洁的实现方式
要实现修改原字典对象(保证多次调用时状态保留)的前提下,更简洁的写法是使用字典的update方法:
def myfunc(d={}): d.clear() d.update(otherd)
甚至可以写成一行:
def myfunc(d={}): d.clear(); d.update(otherd)
注意事项
不要直接使用d = otherd.copy()或者d = dict(otherd),因为这会将d重新绑定到一个新的字典对象,而不是修改原本的默认字典参数。这样做会导致后续函数调用时,默认参数还是最初的空字典,无法保留之前修改的状态——这违背了示例中利用默认可变参数保留状态的需求。
注:默认可变值是在函数首次调用时初始化并存储的值,修改后会在多次函数调用中保持状态,访问时返回最新状态而非初始状态。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

