d = dict()"和"d = {}"的区别

37 投票
5 回答
22864 浏览
提问于 2025-04-15 22:12
$ 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 个回答

10

如果有人使用 dict() 而不是 {},一般来说是因为他们不知道 {} 的存在(这可真不容易),或者他们觉得 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

(而且因为某些键不合法而混合使用不同的风格,真让人不舒服。)

24

d=dict() 这个写法需要先去查找一下当前作用域里的变量,也就是要先看 locals(),然后再去查找全局变量 globals(),最后还要查找内置的变量 __builtins__。而 d={} 这个写法就不需要这么麻烦,直接就可以创建一个空字典。

62

我比较喜欢用文字而不是标点符号,这也是我选择Python而不是Perl的原因之一。毕竟,“生活没有大括号会更好”(这是Python的一个老口号,曾经印在一件T恤上,配上一个微笑的青少年的卡通形象;-)。这个口号最初是想说用缩进来分组比用大括号要好,不过,嘿,大括号就是大括号嘛!

为了使用更清晰、可读性更强的短单词,而“付出”一些纳秒的时间是可以接受的(这主要是因为每次使用内置类型或函数时,你需要查找内置命名空间的代价,当然你可以通过把一些查找操作放到循环外来稍微优化一下)。

所以,我通常喜欢用dict()代替{},用list(L)代替L[:],用list()代替[],用tuple()代替(),等等——这只是我个人的风格偏好,喜欢写出“可以发音”的代码。当我在一个已有的代码库中工作,或者在新项目中我的队友有不同的风格偏好时,我当然可以接受这种差异(不过在队友的情况下,我可能会尝试说服他们一下;-)。

撰写回答