default-factory-kwarg (RUF026)
有时提供修复。
作用
检查在初始化 defaultdict
时错误地使用 default_factory
作为关键字参数的情况。
为什么这不好?
defaultdict
构造函数接受一个可调用对象作为其第一个参数。例如,通常通过 defaultdict(int)
或 defaultdict(list)
使用 int
或 list
初始化 defaultdict
,以创建一个字典,当键丢失时分别返回 0
或 []
。
默认工厂必须作为位置参数提供,因为 defaultdict
的所有关键字参数都被解释为字典中的初始条目。例如,defaultdict(foo=1, bar=2)
将创建一个字典,其初始条目为 {"foo": 1, "bar": 2}
。
因此,defaultdict(default_factory=list)
将创建一个字典,其初始条目为 {"default_factory": list}
,而不是一个当键丢失时返回 []
的字典。指定 default_factory
关键字参数几乎总是错误的,并且是类型检查器无法可靠地检测到的错误。
修复安全性
此规则的修复被标记为不安全,因为将 default_factory
从关键字参数转换为位置参数会改变代码的行为,即使关键字参数被错误地使用了。
示例
建议改为