日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
你知道瘋狂的字典嗎?

代碼定義了一個類 FibDict,繼承自 dict,自定義了魔術方法 __missing__ 當 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ù)不會重復計算,因此效率非常高。

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

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

不過,遞歸雖爽,可不要貪杯哦,任何事情都有極限,1000 是遞歸的默認極限(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)用它,永遠不會出現(xiàn)遞歸的問題:


文章題目:你知道瘋狂的字典嗎?
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdhpesg.html