• Python中的defaultdict和魔术方法 __missing__()


    Python中的defaultdict可用于给所有的key赋一个默认的value

    这样当访问的key对应的value不存在的时候,可以返回一个默认值

    一些defaultdict的用法:

    dd = defaultdict(list)
    
    def zero():
        return 0
    dd = defaultdict(zero)
    
    dd = defaultdict(lambda: 0)

    defaultdict的实现使用了魔术方法:__missing__()

    通过如下操作:

    >>> from collections import defaultdict
    >>> print defaultdict.__missing__.__doc__
    __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

    可以看出当使用__getitem__来访问一个不存在的key的时候,会调用__miss__()方法获取默认值,并将该值添加到字典中去

    从这里 https://docs.python.org/3/library/stdtypes.html#dict 可以得知,dict中不存在__missing__()方法,需要在派生的子类中自己实现这个方法

    举个例子:

    def Missing(dict):
        def __missing__(self, key):
            self[key] = 'default'   # 若不加这一句,对Missing这个dict来说是有很大区别的
            return 'default'

    由于defaultdict类是从2.5版本之后才添加的,一个在2.5之前版本调用defaultdict的写法是这样的:

    try:
        from collections import defaultdict
    except ImportError:
        class defaultdict(dict):
          def __init__(self, default_factory=None, *a, **kw):
              dict.__init__(self, *a, **kw)
              self.default_factory = default_factory
    
          def __getitem__(self, key):
              try:
                  return dict.__getitem__(self, key)
              except KeyError:
                  return self.__missing__(key)
    
          def __missing__(self, key):
              self[key] = value = self.default_factory()
              return value

    总结自:http://kodango.com/understand-defaultdict-in-python

  • 相关阅读:
    Java的格式化输出
    常用排序算法的Python实现
    零基础自学用Python 3开发网络爬虫(一)
    Python常见数据结构整理
    百度天气预报API的使用(java版本)
    大总结
    CCS学习(三)
    CSS学习(页外引用还不懂)
    CSS自定义动画
    ssm日期格式转换
  • 原文地址:https://www.cnblogs.com/geeklove01/p/8747653.html
Copyright © 2020-2023  润新知