“d = dict()”和“d = {}”之间的差异

时间:2010-04-30 13:58:08

标签: python performance dictionary timing

$ 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

为什么要使用其中一个?

5 个答案:

答案 0 :(得分:51)

我是喜欢标点符号的人之一 - 例如,这是我在Perl上选择Python的原因之一。 “没有大括号的生活会变得更好”(一个古老的蟒蛇座右铭,穿着T恤上带着一个微笑少年的卡通片;-),毕竟(原本打算用括号和缩进来分组,当然,但是,嘿,嘿,牙箍是牙套! - )。

“支付”一些纳秒(为了使用清晰,可读的短字而不是大括号,括号和诸如此类的东西)通常是可以承受的(这主要是查找内置命名空间的成本,这是你付出的代价每次使用内置类型或函数时,都可以通过从循环中提取一些查找来温和地优化它。)

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

答案 1 :(得分:23)

d=dict()要求在locals()中进行查询,然后globals(),然后__builtins__d={}不会

答案 2 :(得分:9)

如果人们(仅仅)dict()使用(仅仅){},通常是因为他们不了解{}(这是一项非常壮举),或者是因为他们认为它更清晰(这是主观的,但不常见。)

您可以使用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

(混合样式只是因为某些键不是有效的标识符,不好意思。)

答案 3 :(得分:7)

Doug Hellmann写了详尽的comparison表现差异。

<强> TL;博士

  

使用CPython 2.7,使用dict()创建字典最多需要6个   时间更长,涉及更多的内存分配操作   字面语法。使用{}创建词典,特别是如果你是   预先填充它们,除非文字语法不适用于您的   情况下。

答案 4 :(得分:1)

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