我是靠谱客的博主 落寞口红,最近开发中收集的这篇文章主要介绍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 __missing__所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部