我尝试在Pyscripter中运行以下代码,但它一直返回错误"'list'对象不可调用".我通过Python shell运行代码,它工作得非常好.我不太明白为什么它不能在Pyscripter中工作.另外,我使用的是Python 2.7.
import itertools
print list(itertools.permutations([1,2,3,4], 2))
Run Code Online (Sandbox Code Playgroud)
即使在Pyscripter中创建一个简单的列表也会返回相同的错误.
list()
Run Code Online (Sandbox Code Playgroud)
提前致谢!
几乎可以肯定,您将名单重新绑定到列表实例:
>>> import itertools
>>> print list(itertools.permutations([1,2,3,4], 2))
[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
>>>
>>> list = [2,3,4]
>>> list(itertools.permutations([1,2,3,4], 2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
Run Code Online (Sandbox Code Playgroud)
不要调用列表list或字符串str等.
您以前在某处创建了一个列表并将其命名list.这是一个坏主意.该名称list未在Python中专门处理.当您启动解释器时,list为列表类型命名,但如果您为其他名称命名list,list则不能再是列表类型的名称,因为名称只能同时引用一个事物.
因此,当您编写list()期望创建新列表(即实例化列表类型)时,Python会执行它始终执行的操作:它查找名称list,然后尝试将()(即__call__)应用于具有该名称的任何内容.由于list现在引用了其他一些列表,因此失败,正如'list' objects are not callable错误消息所说的那样.