和{} vs list()和dict(),哪个更好?

我知道他们本质上是一样的东西,但是在风格方面,哪个更好(更Pythonic)用来创build一个空的列表或字典?

在速度方面,空白名单/字典没有竞争:

>>> from timeit import timeit >>> timeit("[]") 0.040084982867934334 >>> timeit("list()") 0.17704233359267718 >>> timeit("{}") 0.033620194745424214 >>> timeit("dict()") 0.1821558326547077 

和非空的:

 >>> timeit("[1,2,3]") 0.24316302770330367 >>> timeit("list((1,2,3))") 0.44744206316727286 >>> timeit("list(foo)", setup="foo=(1,2,3)") 0.446036018543964 >>> timeit("{'a':1, 'b':2, 'c':3}") 0.20868602015059423 >>> timeit("dict(a=1, b=2, c=3)") 0.47635635255323905 >>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]") 0.9028228448029267 

此外,使用括号表示让我们使用列表和字典parsing,这可能是足够的理由。

在我看来, []{}是创build空白列表/字典最pythonic和可读的方式。

不过要小心set() ,例如:

 this_set = {5} some_other_set = {} 

可能会令人困惑。 第一个创build一个元素的集合,第二个创build一个空的字典而不是一个集合。

字典文字可能会稍微快一点,因为它的字节码更短:

 In [1]: import dis In [2]: a = lambda: {} In [3]: b = lambda: dict() In [4]: dis.dis(a) 1 0 BUILD_MAP 0 3 RETURN_VALUE In [5]: dis.dis(b) 1 0 LOAD_GLOBAL 0 (dict) 3 CALL_FUNCTION 0 6 RETURN_VALUE 

同样适用于list vs []

因为在Python风格指南中没有提到,所以你可以使用任何你想要的风格,这是个人品味的问题。

[]和{}更好

list()本质上比[]慢,而dict()本质上比{}慢,

因为

  1. 有符号查找(没有办法python提前知道,如果你不只是重新定义列表是别的!),

  2. 有函数调用,

  3. 然后,它必须检查是否有迭代的parameter passing(所以它可以创build它的元素列表)

在大多数情况下,速度差异不会有任何实际的区别。

( 来源 )

恕我直言,使用list()dict()让你的Python看起来像C.呃。

时间似乎并没有给出准确的时间。 根据上面提到的dict()的timeit基准,它似乎需要〜200ms,这比正常的http调用要慢一些。 尝试运行在shell,dict(),然后timeit(“dict()”),你会看到在执行中的可见差异; timeit(“dict()”)需要更长的时间。 复制粘贴下面的一段代码,然后在shell中运行,在{}和dict()中看不到太多的区别。

  from datetime import datetime then = datetime.now() a = dict() now = datetime.now() print then print now then = datetime.now() b = {} now = datetime.now() print then print now 

这主要是大部分时间select的问题。 这是一个偏好的问题。

但是请注意,如果您有数字键,例如您不能这样做:

 mydict = dict(1="foo", 2="bar") 

你必须做:

 mydict = {"1":"foo", "2":"bar"}