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