Python 开发与语法
Python 可变默认参数为什么会串数据
用 None 或工厂让每次调用拥有独立容器。
原理
函数默认参数在定义时求值。把列表写作默认参数,同一个列表会被后续未传参的调用共享。
开发中的做法
需要每次创建新列表时,用 None 作为缺省标记。判断要用 is None,空列表也可能是调用者故意传入的有效参数。
验证与追问
写两次连续调用的测试,检查第一次的内容不会出现在第二次结果里。数据类字段则用 field(default_factory=list)。
代码片段
def append_tag(tag, tags=None):
if tags is None:
tags = []
tags.append(tag)
return tags