datastructure

orderedset

直接使用了collection中的orderdict來實(shí)現(xiàn)呛每,初始化函數(shù)中接入一個(gè)可迭代的對(duì)象赂韵,取出每一項(xiàng)作為key值族淮,value均填空。

add remove discard都是對(duì)應(yīng)操作orderdict來實(shí)現(xiàn)

multivaluedict

使用了list作為value的類型來實(shí)現(xiàn)一個(gè)key值對(duì)應(yīng)多個(gè)value
在獲取值時(shí)锐帜,如果value有值則返回list中的最后一個(gè)元素,否則返回一個(gè)空列表畜号,設(shè)置值則為標(biāo)準(zhǔn)的key value設(shè)置缴阎,只是value會(huì)被轉(zhuǎn)換為list

此外還有一些針對(duì)list的操作 如getlist setlist setlistdefault appendlist等是在value的list級(jí)別上進(jìn)行操作的

對(duì)應(yīng)迭代器的實(shí)現(xiàn),items values的實(shí)現(xiàn)是正常的简软,有一個(gè)lists函數(shù)的實(shí)現(xiàn)是對(duì)應(yīng)py3特有的iterlists

此外提供了一個(gè)update方法及一些奇怪的東西getstate和setstate的描述符

Immutablelist

class ImmutableList(tuple):
    """
    可以提供有用錯(cuò)誤信息的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):
    """
    在返回值前蛮拔,根據(jù)傳入的key值是否有prefix開頭來決定是否調(diào)用func

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

    def __getitem__(self, key):
    
        # 發(fā)現(xiàn)了特定prefix開頭的key 需要調(diào)用用戶指定的函數(shù)
        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)  # 在返回前調(diào)用用戶指定的函數(shù)
        return value
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市痹升,隨后出現(xiàn)的幾起案子建炫,更是在濱河造成了極大的恐慌,老刑警劉巖疼蛾,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛跌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惋砂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門妒挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人西饵,你說我怎么就攤上這事酝掩。” “怎么了眷柔?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵期虾,是天一觀的道長。 經(jīng)常有香客問我驯嘱,道長镶苞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任鞠评,我火速辦了婚禮茂蚓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剃幌。我一直安慰自己聋涨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布负乡。 她就那樣靜靜地躺著牍白,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抖棘。 梳的紋絲不亂的頭發(fā)上茂腥,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音切省,去河邊找鬼最岗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛数尿,可吹牛的內(nèi)容都是我干的仑性。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼右蹦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诊杆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起何陆,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤晨汹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贷盲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淘这,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剥扣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铝穷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钠怯。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曙聂,靈堂內(nèi)的尸體忽然破棺而出晦炊,到底是詐尸還是另有隱情,我是刑警寧澤宁脊,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布断国,位于F島的核電站,受9級(jí)特大地震影響榆苞,放射性物質(zhì)發(fā)生泄漏稳衬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一坐漏、第九天 我趴在偏房一處隱蔽的房頂上張望薄疚。 院中可真熱鬧,春花似錦仙畦、人聲如沸输涕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衣式,卻和暖如春寸士,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碴卧。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工弱卡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人住册。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓婶博,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荧飞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凡人,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)叹阔,斷路器挠轴,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法耳幢,內(nèi)部類的語法岸晦,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評(píng)論 18 399
  • 一启上、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù)邢隧,當(dāng)然包括負(fù)整數(shù),在Python程序...
    績重KF閱讀 1,700評(píng)論 0 1
  • 從三月份找實(shí)習(xí)到現(xiàn)在冈在,面了一些公司倒慧,掛了不少,但最終還是拿到小米讥邻、百度迫靖、阿里、京東兴使、新浪系宜、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,246評(píng)論 11 349
  • 在一起當(dāng)過兵的叫戰(zhàn)友发魄、一起跳舞的叫舞友盹牧、一起打球的當(dāng)然叫球友哦。 從小就喜歡打乒乓球励幼,參加工作后汰寓,節(jié)假日、工作之余...
    梅勝雪閱讀 693評(píng)論 10 11