跳到内容

default-factory-kwarg (RUF026)

添加于 0.5.0 · 相关问题 · 查看源码

有时提供修复。

作用

检查在初始化 defaultdict 时将 default_factory 用作关键字参数的不正确用法。

为什么这不好?

defaultdict 构造函数接受一个可调用对象作为其第一个参数。例如,通常会通过 defaultdict(int)defaultdict(list) 使用 intlist 初始化 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 从关键字参数转换为位置参数会改变代码的行为,即使该关键字参数本身是被错误使用的。

示例

defaultdict(default_factory=int)
defaultdict(default_factory=list)

建议改为

defaultdict(int)
defaultdict(list)