d = dict()"和"d = {}"的区别
$ 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
(而且因为某些键不合法而混合使用不同的风格,真让人不舒服。)
62
我比较喜欢用文字而不是标点符号,这也是我选择Python而不是Perl的原因之一。毕竟,“生活没有大括号会更好”(这是Python的一个老口号,曾经印在一件T恤上,配上一个微笑的青少年的卡通形象;-)。这个口号最初是想说用缩进来分组比用大括号要好,不过,嘿,大括号就是大括号嘛!
为了使用更清晰、可读性更强的短单词,而“付出”一些纳秒的时间是可以接受的(这主要是因为每次使用内置类型或函数时,你需要查找内置命名空间的代价,当然你可以通过把一些查找操作放到循环外来稍微优化一下)。
所以,我通常喜欢用dict()
代替{}
,用list(L)
代替L[:]
,用list()
代替[]
,用tuple()
代替()
,等等——这只是我个人的风格偏好,喜欢写出“可以发音”的代码。当我在一个已有的代码库中工作,或者在新项目中我的队友有不同的风格偏好时,我当然可以接受这种差异(不过在队友的情况下,我可能会尝试说服他们一下;-)。