2013年3月7日 星期四

dict literal 與 dict constructor 的比較

    基本上, dict literal ( 使用{}建立物件 ) 和 dict constructor ( 使用 dict() 建立物件 ) 結果一樣。 只是他們之間仍有些許的差異。

    首先是速度上的差異,當 interrupter 執行到 {} 時,interrupter 會知道是要建立 dict 物件。 然而,當 interrupter 執行到 dict() 時,他會認定執行 function call。因此多個函數呼叫與參數傳遞。不過這兩者間的效能差異不算大,也可能會被最佳化。我用下面程式碼做簡單測試




import timeit

print timeit.timeit('{}', number=10000000)
print timeit.timeit('dict()', number=10000000)

print timeit.timeit('{"a": 1, "b": 2}', number=10000000)
print timeit.timeit('dict(a=1, b=2)', number=10000000)

    在我的電腦程式執行結果為
0.343515010393
1.87652465496
1.05200176199
3.6373124445
    很明顯,使用dict literal 比  dict constructor 快。不過執行 10000000 次才有一秒的差距。所以也沒差太多。

    其次,使用 dict literal 的用法,他允許你使用非字串物件當作 key。 然而,使用 dict constructor 他只支援使用 字串物件當作 key。不過 python 的 dict 物件對於使用字串當成 key 的查詢有做最佳化。所以用字串當 key 沒什麼不好的。

    最後一個差別,就是你用 dict constructor  建立物件時,當你的 key 是 字串時,你可以少打很多個單引號或雙引號。不過當你是用 dict literal,就只能乖乖地打單引號或雙引號了。

 

1 則留言:

  1. Casino (2021) - Trick-Tactic, E-B, E-B, E - Trick-Tactic, E-B
    Step into the casino! 마추 자 먹튀 · Select the 바카라 게임 사이트 Slot, or Double Deposit Method · Select “Double Deposit Method” งานออนไลน์ · Select “Deluxe Deposit Method” 토토 갤러리 넷마블 · 먹튀폴리스 Choose “Double Deposit Method” · Select

    回覆刪除