$ 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
为什么要使用其中之一而不是另一个?
$ 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
为什么要使用其中之一而不是另一个?
dict()
替代{}
,用list(L)
替代L[:]
,以及用list()
替代[]
,用tuple()
替代()
等等——只是一种偏好可发音的代码风格。当我在一个已有代码库上工作时,该代码库使用不同的风格,或者当我在一个新项目中与队友们有不同的强烈偏好时,我当然可以接受(在队友的情况下,我会尝试一些传教工作,呵呵).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
Doug Hellmann撰写了一篇详尽的性能比较报告。
简而言之
在使用CPython 2.7时,使用dict()创建字典的时间可能会比使用字面量语法慢6倍,并涉及更多的内存分配操作。如果您需要预先填充字典,请使用{}来创建字典,除非字面量语法无法胜任您的情况。
就像Thomas所说,我使用dict()函数来指定关键字。特别是当我手动构建一个大型字典用于数据初始化或其他用途时:能够使用关键字语法可以为每个元素节省两个按键(以及相关的视觉杂乱)。
for i in x: f(dict())
这样的代码(会对名字dict
进行len(x)
次查找)优化为在循环外部绑定一个本地的d=dict
,然后在循环中使用for i in x: f(d())
,这样就可以进行更快速的本地查找了。请注意,在翻译过程中不要改变原文的含义,并尽可能使翻译易于理解。 - Alex Martellis=str()
和s=''
有什么区别? - tshepang{}
习惯用法,因此存在一种不舒适的不对称性。对于空集合,你有[]
表示list()
,{}
表示dict()
,甚至()
表示tuple()
,但是却没有类似于set()
的东西。 - André C. Andersen