list()和[]之间有什么区别

lan*_*ng2 18 python

以下代码之间的区别是什么:

foo = list()
Run Code Online (Sandbox Code Playgroud)

foo = []
Run Code Online (Sandbox Code Playgroud)

Python表明有一种做事方式,但有时似乎不止一种.

Doo*_*nob 24

一个是函数调用,一个是文字:

>>> import dis
>>> def f1(): return list()
... 
>>> def f2(): return []
... 
>>> dis.dis(f1)
  1           0 LOAD_GLOBAL              0 (list)
              3 CALL_FUNCTION            0
              6 RETURN_VALUE        
>>> dis.dis(f2)
  1           0 BUILD_LIST               0
              3 RETURN_VALUE        
Run Code Online (Sandbox Code Playgroud)

使用第二种形式.它更像Pythonic,它可能更快(因为它不涉及加载和调用单独的函数).


orl*_*rlp 13

list是一个可在运行时覆盖的全局名称.list()叫这个名字.

[] 始终是列表文字.

  • 请注意,只有可怕的人才会覆盖`list`.(但这是一个很好的观点.):P (8认同)

And*_*Sun 13

为了完成,需要注意的另一件事是list((a,b,c))返回[a,b,c],而[(a,b,c)]不会解压缩元组.当您想要将元组转换为列表时,这非常有用.反过来也有效,tuple([a,b,c])返回(a,b,c).

编辑:正如orlp提到的,这适用于任何可迭代的,而不仅仅是元组.

  • 我认为这是最重要的区别,因为它实际上会产生不同的结果. (3认同)
  • 完全同意@SethMMorton:`list()`只接受iterables作为参数,而`[]`只是用一个列表包装你扔给它的任何东西.所以,如果你试图运行`list(1)`你会得到一个异常,因为`int`是不可迭代的,而`[1]`会正常工作.它还解释了拆包属性! (2认同)