3

标题说明了一切:

有什么理由使用 dict 而不是defaultdict吗?

我能想到的唯一原因是“我真的不需要它”。但后来我可以问是否有任何理由为什么 dict 没有被 defaultdict 取代。

可能的原因可能是:

  • 性能损失
  • 测试

但我不认为性能损失如此糟糕,因为您只需检查是否已经存在一个新值,该值在 O(1) 中摊销。

我也想不出测试可能会变得更加困难的例子。(但我不是很有经验)

4

1 回答 1

10

使用 a 的很多理由defaultdict

  • 如果您的值不是同质的,因此不能由简单的工厂函数生成。
  • 如果您需要缺少键来引发异常而不是自动为您创建新值。
  • 如果您的所有默认值都需要比工厂函数接收的更多上下文;例如,工厂功能无法访问正在插入的密钥。

defaultdict填充一个专门的用例,您希望在缺少键时为您自动创建值,并且可以使用工厂函数生成这些值,而无需访问插入的键。

请注意,异常不仅仅用于标记程序员错误。异常是 Python 语言中一个非常强大的部分,它的用途远不止编码错误。如果您的数据通常不需要新密钥,那么使用异常处理(请求宽恕)比每次都测试密钥(请求许可)更快。

请参阅Progammers 上的Python Forgiveness vs. Permission 和 Duck Typing over 进行比较。

于 2013-10-29T18:54:15.040 回答