有没有理由使用dict而不是defaultdict?

Mar*_*oma 3 python dictionary

标题说明了一切:

有没有理由使用dict而不是defaultdict

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

可能的原因可能是:

  • 表现不佳
  • 测试

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

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

Mar*_*ers 9

很多理由使用defaultdict:

  • 如果您的值不均匀,因此无法通过简单的工厂函数生成.
  • 如果您需要丢失的钥匙提高,而不是自动为您创造新价值的一个例外.
  • 如果所有默认值都需要比工厂函数接收的更多上下文; 例如,工厂功能无法访问要插入的密钥.

defaultdict填补了专门的用例,在这里你值是自动为您创建一个键丢失时,这些值可以用一个工厂函数没有访问关键的插入产生.

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

有关比较,请参阅Python Forgiveness vs. Permission和Duck Typing on Progammers.