在列表中使用sum函数时,'int'对象不可调用

Mat*_*ips 16 python list

coinCount = [2 for i in range(4)]
total = sum(coinCount)
Run Code Online (Sandbox Code Playgroud)

这给了我

TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)

我不明白为什么因为

print type(coinCount)
Run Code Online (Sandbox Code Playgroud)

给我

type <'list'>
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 60

毫无疑问sum,您在代码中先前使用了标识符作为本地变量名,并且绑定到它的最后一个值是int.所以,在那个代码片段中,你试图调用int. print sum在您尝试调用它之前,您会看到,但代码检查可能会更快地显示它.

这种问题是为什么专家Pythonistas一遍又一遍地告诉新手"不要为你自己的变量使用内置名称!" 即使它显然不是伤害特定的代码片段:这是一个可怕的习惯,错误只是等待发生,如果你使用的标识符,例如sum,file,list!,等等,作为自己的变量或函数- )

  • 经常推荐的替代方法是在标识符上添加下划线后缀,否则会与保留字和内置标识符发生冲突;即“type_”或“sum_”或“from_”(如果您想使用介词作为标识符)。 (4认同)

小智 10

我想补充一下 Alex Martelli 所说的不要使用 sum 作为变量名,但是如果你的程序已经太长或者你正在使用空闲并且你不想重新开始,你可以做

sum2 = sum
del sum
Run Code Online (Sandbox Code Playgroud)

将 sum 的值传输到 sum2(如有必要)并删除变量 sum(允许您继续使用 sum 函数)