2010-04-30 59 views

回答

22

d=dict()需要locals()查找然後globals()然後__builtins__d={}

+0

不,''dict'在'__builtin__'中。 – 2010-04-30 15:13:56

+0

@MikeGraham是的,但在大多數情況下'__builtins__'是'__builtin__'的別名「 – jamylak 2013-06-03 10:39:42

9

如果人們使用(只)dict()以上(只){},它通常是因爲他們不知道{}(這是相當一個壯舉),或者是因爲他們認爲這是更清晰(這是主觀的,但不常見。)

有事情可以dict做,你不能與{}怎麼做,比如把它傳遞的東西,希望馬蹄蓮如collections.defaultdict(dict)。還有的事實,你可以調用dict與關鍵字參數,其中一些人喜歡:

>>> dict(spam=1, ham=2) 
{'ham': 2, 'spam': 1} 

就個人而言,我更喜歡字典文字語法,因爲它工作得更好,當你想使用無效的標識符鍵:

>>> dict(pass=1) 
File "<stdin>", line 1 
    dict(pass=1) 
     ^
SyntaxError: invalid syntax 
>>> dict('ham and eggs'=1) 
    File "<stdin>", line 1 
SyntaxError: keyword can't be an expression 

(和混合風格,只是因爲某些鍵不是有效的標識符,呸。)

42

我那些誰喜歡的話標點符號之一 - 它是我挑選過的Python的原因之一Perl,例如。 「沒有大括號的話,生活會更好」(一個古老的Python格言,它帶着一個微笑的少年的卡通穿上了一件T恤;-),畢竟(當然,最初是爲了分組而提到大括號和縮進),但是,嘿, ,括號是括號! - )。

「支付」幾納秒(爲了使用清晰,可讀的簡短字代替大括號,括號和whatnots)通常是可以承受的(主要是查找內置命名空間的成本,每次使用內置類型或函數時都付費,並且可以通過將循環中的某些查找提升爲輕微優化)。

所以,我一般誰喜歡寫dict(){}list(L)代替L[:]以及list()[]tuple()(),等等一個 - 只爲拼讀一般的風格偏好碼。當我在使用不同風格的現有代碼庫上工作時,或者當我的新項目中的隊友以另一種方式擁有強烈的偏好時,我可以接受這一點,當然(不是沒有嘗試在隊友的情況下進行一點傳福音,儘管;-)。

+0

」將某些查找從循環中提取出來 - 這意味着什麼? – Tshepang 2010-04-30 15:48:28

+9

@Tshepang,例如代替'for in x:f(dict())'('len(x)'lookup for name'dict'),首先綁定一個本地'd = dict'在循環外部,然後'for i in x:f(d())',它對名字'd'做了一個更快的_local_查找)。這是一種基本的Python技術,用於優化某些循環(當然,通過分析),證明它們是性能瓶頸。 – 2010-04-30 16:25:15

+1

順便說一句(當然,並不涉及這個問題),Unladen Swallow應該使這種成語(d = dict)不必要:) – rbp 2010-04-30 16:56:47

1

像托馬斯說,我使用dict(),所以我可以指定關鍵字。特別是如果我手動構建一個大的字典來進行數據初始化或者不需要:使用關鍵字語法可以爲每個元素節省兩個擊鍵(以及相關的視覺混亂)。

6

Doug Hellmann寫了一個詳盡的comparison的性能差異。

相關問題