我是靠谱客的博主 甜蜜香菇,这篇文章主要介绍Python __missing__,现在分享给大家,希望可以做个参考。

According to the python documentation:


If a subclass of dict defines a method __missing__(), if the key key is not present, the d[key] operation calls that method with the key key as argument. The d[key] operation then returns or raises whatever is returned or raised by the __missing__(key) call if the key is not present. No other operations or methods invoke __missing__(). If __missing__() is not defined, KeyError is raised. __missing__() must be a method; it cannot be an instance variable.


For an example, see collections.defaultdict.


This is, at least, incomplete, since __missing__ must not only return the default value, but also assign it internally. This is made clear in the documentation for collections.defaultdict:


If default_factory is not None, it is called without arguments to provide a default value for the given key, this value is inserted in the dictionary for the key, and returned.

Surprisingly, the __missing__ method is not mentioned in the special method names section of the python documentation.

class memoize(dict):
def __init__(self, func):
self.func = func
def __call__(self, *args):
print "__call__"
return self[args]
def __missing__(self, key):
print "__missing__"
result = self[key] = self.func(*key)
return result
@memoize
def foo(a, b):
return a * b
print foo(1,2)
print foo(1,2)
print foo(1,2)
print foo(1,2)
print foo(1,2)
print foo(1,2)

执行结果:

__call__
__missing__
2
__call__
2
__call__
2
__call__
2
__call__
2
__call__
2



最后

以上就是甜蜜香菇最近收集整理的关于Python __missing__的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部