美文网首页
datastructure

datastructure

作者: xncode | 来源:发表于2017-05-14 11:36 被阅读0次

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

相关文章

  • datastructure

    orderedset 直接使用了collection中的orderdict来实现,初始化函数中接入一个可迭代的对象...

  • C and DataStructure

    991“数据结构与C语言程序设计”考试大纲(2019版) 2019年“数据结构与C语言程序设计”考试内容包括“数据...

  • HashMap的使用

    package com.miller.datastructure.precious; import java.ut...

  • 解决共享资源冲突问题2

    使用Lock类 package com.miller.datastructure.thread; import j...

  • Java DataStructure And Algorithm

    #Markdown first 简书 代码高亮展示public static void main (String[...

  • 一篇文章搞懂算法基础

    源码地址 https://github.com/javanan/DataStructure 目录 时间复杂度介绍空...

  • [原创] DataStructure —— 树之道

    扁担宽板凳长扁担想绑在板凳上板凳不让扁担绑在板凳上扁担偏要绑在板凳上板凳偏偏不让扁担绑在那板凳上到底扁担宽还是板凳...

  • Pandas学习

    点击以下链接阅读原文 首先模块导入别忘了 DataStructure assign函数 Assign函数使用时优先...

  • 第二章 程序的灵魂-算法

    数据的描述+操作的描述(datastructure + algorithm) 教材说还得有 程序设计方法+语言工具...

  • 算法和数据结构(C语言)

    Algorithm & DataStructure C程序设计 数据结构(C语言版) 算法 数据结构与算法分析--...

网友评论

      本文标题:datastructure

      本文链接:https://www.haomeiwen.com/subject/nkldtxtx.html