<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          瘋狂的字典

          共 822字,需瀏覽 2分鐘

           ·

          2022-06-01 17:38

          你好,我是 somenzz,Python 的靈活程度讓人發(fā)指,今天來分享一下關(guān)于字典的瘋狂操作,計算斐波那契數(shù)列,話不多說,先看代碼:

          代碼定義了一個類 FibDict,繼承自 dict,自定義了魔術(shù)方法 __missing__ ?當(dāng) dict 查找 key 失敗(missing)的時候,會由 Python 解釋器自行調(diào)用改方法。換句話說,如果試圖從 dict 中獲取不存在的 key,就會執(zhí)行這個方法。

          因此計算 fib_dict[10] 就會執(zhí)行這個方法,計算 fib_dict[9] 和 fib_dict[8],就這樣遞歸,一直到 fib_dict[0] 和 fib_dict[1]。

          這是遞歸,但是字典是一種 hash 表,只要計算過的數(shù)據(jù)不會重復(fù)計算,因此效率非常高。

          我們可以驗證下計算 fib_dict[200] 的耗時:

          可以看出連 1 毫秒都不到。

          不過,遞歸雖爽,可不要貪杯哦,任何事情都有極限,1000 是遞歸的默認(rèn)極限(sys.getrecursionlimit() == 1000),如果你直接計算 fib_dict[501] 就拋出 RecursionError 異常。

          你可能有個小小的疑問,為什么遞歸的深度是 1000,但我調(diào)用 501 次就不行了呢?其實原因在于? __missing__ 調(diào)用了 __setitem__, __setitem__ 又調(diào)用了 __missing__,因此每個缺失的 key 其實調(diào)用了兩次,所以超過 500 就會報錯。

          但是,字典是有記憶的,如果你這樣調(diào)用它,永遠(yuǎn)不會出現(xiàn)遞歸的問題:

          最后的話

          本次分享了字典的瘋狂操作,有沒有讓你感覺眼前一亮呢,如果有,歡迎點贊、在看、轉(zhuǎn)發(fā)。點擊下方的卡片或掃一掃關(guān)注我,為你提供 Python 技術(shù)支持。

          推薦閱讀:

          Python 關(guān)于字典的操作,看這個就夠了

          為什么 Python3.6 之后字典是有序的

          瘋狂的元組

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲一区二区精品 | 成人AV电影网 久久爱 | 国产91乱码一区二区三区 | 黄色动漫成人视频在线观看 | 免费黄片视频在线观看 |