第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么“try ... except KeyError ...”比“dict.get”慢?

為什么“try ... except KeyError ...”比“dict.get”慢?

絕地?zé)o雙 2023-01-04 16:05:10
很久以前,有人告訴我d = {}try:    a = d['a']    # do somethingexcept KeyError:    # do something else比a = d.get('a')if a:    # do somethingelse:    # do something else但是今天,我做了一個(gè)簡單的測(cè)試后,發(fā)現(xiàn)結(jié)果恰恰相反:import timed = {}n = 0t1 = time.time()for i in range(1000000):    try:        a = d['a']    except KeyError:        n += 1print(time.time() - t1)>>> 0.4676947593688965import timed = {}n = 0t1 = time.time()for i in range(1000000):    a = d.get('a')    if a is None:        n += 1print(time.time() - t1)>>> 0.3045947551727295那為什么會(huì)這樣呢?在我的想象中,d.get也應(yīng)該做類似的判斷鍵是否存在于dict中的邏輯。
查看完整描述

1 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

當(dāng)例外情況是不常見情況時(shí),您所學(xué)的規(guī)則適用。如果您通常要查找該值,那么d['a']包裝在很少調(diào)用異常處理機(jī)制的try/except KeyError:中將會(huì)獲勝;如果您通常不會(huì)找到該值,則拋出和捕獲異常的開銷將超過使用泛型方法 dispatch ( d.get('a')) 與更直接的語法支持方法 ( ) 相比更高的相對(duì)開銷d['a']。在現(xiàn)代 (3.7+) CPython 中尤其如此,其中方法調(diào)用得到了一些額外的優(yōu)化,減少了d.get('a').

正如您在評(píng)論中指出的那樣,在查找成功的情況下,get速度保持相同,而未d['a']使用的except KeyError:速度明顯更快。在許多情況下它也更正確;如果dict有映射到 的鍵None,您get的基于 的代碼將不會(huì)區(qū)分“鍵未找到”和“鍵映射到None”,這可能是您想要的,但通常不是。


查看完整回答
反對(duì) 回復(fù) 2023-01-04
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)