2010-04-30 37 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的性能差异。

相关问题