我今天遇到了一些让我有点不安的行为。
from collections import defaultdict
d = defaultdict(lambda: "test")现在,d[0]按预期返回"test",但d.get(0)实际上没有返回。这是预期的行为吗?
发布于 2021-11-06 20:23:48
是的,这是意料之中的。除了mydict[x]之外,所有其他方法的工作方式与常规dict完全相同。来自文档
返回一个新的类似字典的对象。defaultdict是内置dict类的子类。它重写一个方法并添加一个可写实例变量。其余的功能与dict类相同,这里没有记录。
它覆盖的方法是__missing__,并作了进一步阐述:
当未找到所请求的键时,dict类的
__getitem__()方法将调用此方法;然后,无论它返回或引发什么,都由__getitem__()返回或引发。 注意,除了__missing__()以外,任何操作都不需要使用__getitem__()。这意味着get()将像普通字典一样返回None作为默认值,而不是使用default_factory.。
重点补充。
发布于 2021-11-06 20:23:47
是的,这就是预期的记录在案行为(原文强调):
注意,除了
__missing__()以外,任何操作都不需要使用__getitem__()。这意味着get()将像普通字典一样,将None作为缺省值返回,而不是使用default_factory。
https://stackoverflow.com/questions/69867598
复制相似问题