在Python中,为什么list(None)是错误但是[None]不是?

gwg*_*gwg 6 python list

传递None给Python的list构造函数是TypeError:

>>> l = list(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

但使用括号来实例化a list很好; 使用None内置函数也很好:

>>> l = [None]
>>> l.append(None)
>>> l
[None, None]
Run Code Online (Sandbox Code Playgroud)

我的理解是,list()并且[]是创造新的等效方式list.我错过了什么?

jon*_*rpe 21

他们并不等同.list()尝试迭代它的参数,使每个对象成为一个单独的列表项,而列表文字[]恰好采用它给出的内容.相比:

>>> list("foo")
['f', 'o', 'o']
>>> ["foo"]
['foo']
Run Code Online (Sandbox Code Playgroud)

你不能迭代None,因此错误.您将获得与任何非可迭代参数相同的信息:

>>> list(1)
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    list(1)
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

为了获得等效的a = [None]使用list(),你必须将它传递给一个带有单个对象的迭代,例如

a = list([None])
Run Code Online (Sandbox Code Playgroud)

虽然这会创建列表文字,然后复制它,所以在这个简单的例子中并不是非常有用!