魔法函数 object.missing,官方原文描述如下:
Called by dict.getitem() to implement self[key]
for dict subclasses when key is not in the dictionary.
翻译过来大概意思是:当语句 self[key]
中的 key
不在字典中的时候被调用。
通常情况下,我们从 dict 中获取一个不存在的 key 时会抛出 KeyError 异常:
1 2 3 4 5 6 7
| >>> d = {} >>> d['a'] Traceback (most recent call last): File "/***/code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> KeyError: 'a'
|
如果不想抛出异常,那么大概率会使用 defaultdict
:
1 2 3 4
| >>> from collections import defaultdict >>> d = defaultdict(lambda: 'default value') >>> d['a'] 'default value'
|
使用 help(dict)
可以发现,dict 描述中虽然有许多魔法函数,但是却没有 __missing__
。
而使用 help(defaultdict)
查看,可以发现:
1 2 3 4 5 6 7 8 9
| class defaultdict(builtins.dict) | defaultdict(default_factory[, ...]) --> dict with default factory | ... | __missing__(...) | __missing__(key) # Called by __getitem__ for missing key; pseudo-code: | if self.default_factory is None: raise KeyError((key,)) | self[key] = value = self.default_factory() | return value | ...
|