跳到内容

default-factory-kwarg (RUF026)

有时提供修复。

作用

检查在初始化 defaultdict 时错误地使用 default_factory 作为关键字参数的情况。

为什么这不好?

defaultdict 构造函数接受一个可调用对象作为其第一个参数。例如,通常通过 defaultdict(int)defaultdict(list) 使用 intlist 初始化 defaultdict,以创建一个字典,当键丢失时分别返回 0[]

默认工厂必须作为位置参数提供,因为 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)