You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

显式传入default_factory参数时,defaultdict为何会忽略该参数?

问题解答:default_factory参数传递错误导致的异常

这种情况完全符合预期,问题出在对defaultdict构造函数的参数传递方式理解有误:

  1. defaultdict的构造逻辑
    defaultdict的构造函数中,default_factory是位置参数,而非关键字参数。它的核心签名简化后为:
def __init__(self, default_factory=None, /, **kwargs):

这里的/表示前面的参数只能通过位置传递,不能用关键字指定。

  1. 两段代码的差异
  • d2 = defaultdict(dict):正确将dict作为位置参数传给default_factory,因此d2的default_factory被设置为dict。当访问不存在的key时,会自动调用dict()创建新字典实例,所以d2['key'].update(...)不会报错。
  • d1 = defaultdict(default_factory=dict):这里的default_factory=dict被当作初始化的键值对(属于**kwargs的内容),直接添加到字典中,而实例的default_factory属性保持默认的None。此时d1和普通字典行为一致,访问不存在的'key'会抛出KeyError。

你可以添加一行代码验证这个结论:

print(d1)  # 输出:defaultdict(None, {'default_factory': <class 'dict'>})

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:56:12