datastructure

orderedset

直接使用了collection中的orderdict来实现,初始化函数中接入一个可迭代的对象,取出每一项作为key值,value均填空。

add remove discard都是对应操作orderdict来实现

multivaluedict

使用了list作为value的类型来实现一个key值对应多个value
在获取值时,如果value有值则返回list中的最后一个元素,否则返回一个空列表,设置值则为标准的key value设置,只是value会被转换为list

此外还有一些针对list的操作 如getlist setlist setlistdefault appendlist等是在value的list级别上进行操作的

对应迭代器的实现,items values的实现是正常的,有一个lists函数的实现是对应py3特有的iterlists

此外提供了一个update方法及一些奇怪的东西getstate和setstate的描述符

Immutablelist

class ImmutableList(tuple):
    """
    可以提供有用错误信息的tuple

    """

    def __new__(cls, *args, **kwargs):
        if 'warning' in kwargs:
            warning = kwargs['warning']
            del kwargs['warning']
        else:
            warning = 'ImmutableList object is immutable.'
        self = tuple.__new__(cls, *args, **kwargs)
        self.warning = warning
        return self

    def complain(self, *wargs, **kwargs):
        if isinstance(self.warning, Exception):
            raise self.warning
        else:
            raise AttributeError(self.warning)

    __delitem__ = complain
    __delslice__ = complain
    __iadd__ = complain
    __imul__ = complain
    __setitem__ = complain
    __setslice__ = complain
    append = complain
    extend = complain
    insert = complain
    pop = complain
    remove = complain
    sort = complain
    reverse = complain

DictWrapper

class DictWrapper(dict):
    """
    在返回值前,根据传入的key值是否有prefix开头来决定是否调用func

    """
    def __init__(self, data, func, prefix):
        super(DictWrapper, self).__init__(data)
        self.func = func
        self.prefix = prefix

    def __getitem__(self, key):
    
        # 发现了特定prefix开头的key 需要调用用户指定的函数
        if key.startswith(self.prefix):
            use_func = True
            key = key[len(self.prefix):]  # 去掉增加的prefix
        else:
            use_func = False
        value = super(DictWrapper, self).__getitem__(key)  # 获取值
        if use_func:
            return self.func(value)  # 在返回前调用用户指定的函数
        return value
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,133评论 18 399
  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 5,863评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,473评论 11 349
  • 在一起当过兵的叫战友、一起跳舞的叫舞友、一起打球的当然叫球友哦。 从小就喜欢打乒乓球,参加工作后,节假日、工作之余...
    梅胜雪阅读 3,950评论 10 11