37
$ python2.7 -m timeit 'd={}'
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit 'd=dict()'
1000000 loops, best of 3: 0.19 usec per loop

为什么要使用一个而不是另一个?

4

5 回答 5

59

我是喜欢单词胜过标点符号的人之一——例如,这就是我选择 Python 而不是 Perl 的原因之一。“没有大括号的生活会更好”(一个古老的 Python 格言,它出现在一件带有微笑少年卡通的 T 恤上;-)毕竟(当然,最初是指用于分组的大括号与缩进,但是,嘿,大括号是大括号!-)。

“支付”一些纳秒(为了使用清晰易读的短词而不是大括号、方括号和诸如此类的东西)通常是可以负担的(这主要是查找内置名称空间的成本,这是您每次支付的价格使用内置类型或函数,您可以通过在循环中提升一些查找来温和地优化它)。

所以,我通常是喜欢写dict()for {}list(L)代替L[:]以及list()for []tuple()for()等的人——只是对可发音代码的一般风格偏好。当我在使用不同风格的现有代码库上工作时,或者当我在一个新项目中的队友对另一种方式有强烈的偏好时,我当然可以接受这一点(当然,在队友的情况下,我不会不尝试一点福音,尽管;-)。

于 2010-04-30T14:43:33.750 回答
24

d=dict()locals()then需要查找globals(),不需要__builtins__d={}

于 2010-04-30T14:12:29.217 回答
10

如果人们使用 (just) dict()over (just) {},通常是因为他们不知道{}(这很了不起),或者因为他们认为它更清楚(这是主观的,但不常见)。

但是,有些事情您可以做而dict您不能做{},例如将其传递给需要可调用的东西,例如collections.defaultdict(dict). 还有一个事实是您可以dict使用关键字参数调用,有些人更喜欢:

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

就个人而言,我更喜欢 dict 文字语法,因为当您想使用不是有效标识符的键时,它会更好地工作:

>>> 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

(和混合样式只是因为某些键不是有效的标识符,哎呀。)

于 2010-04-30T14:23:35.823 回答
7

Doug Hellmann 对性能差异进行了详尽的比较

tl;博士

在 CPython 2.7 中,使用 dict() 创建字典的时间比文字语法要长 6 倍,并且涉及更多的内存分配操作。使用 {} 创建字典,尤其是在您预填充它们时,除非文字语法不适用于您的情况。

于 2012-12-05T20:25:18.693 回答
1

就像 Thomas 说的,我使用 dict() 所以我可以指定关键字。特别是如果我为数据初始化或诸如此类的手动构建一个大型字典:能够使用关键字语法为每个元素节省了两次击键(以及相关的视觉混乱)。

于 2010-05-01T02:39:10.020 回答