我的问题是为什么我不能再次调用该功能?或者,如何做到这一点?
假设我有这个功能:
def a(x, y, z):
if x:
return y
else:
return z
我称之为:
print a(3>2, 4, 5)
我得到了4。
但是想象一下,我声明一个与函数同名的变量(错误地):
a=2
现在,如果我尝试这样做:
a=a(3>4, 4, 5)
或:
a(3>4, 4, 5)
我会收到此错误:“TypeError:'int'对象不可调用”
无法将变量'a'分配给函数?
答案 0 :(得分:18)
执行此操作后:
a = 2
a
不再是函数,它只是整数(您重新分配了它!)。所以如果你尝试调用它就好像它是一个函数一样,解释器会自然会抱怨,因为你这样做:
2()
=> TypeError: 'int' object is not callable
底线:你不能同时拥有两个同时的东西,无论是函数,整数还是Python中的任何其他对象。只需使用其他名称即可。
答案 1 :(得分:5)
名称通常为identifiers
,更像是命名一个存储变量/函数/方法的框或python中的任何对象。
重新分配时,您只需重命名一个框。
您可以通过以下方式找到答案。
最初a
在位置9
分配了值140515915925784
。
只要我对函数使用相同的标识符,a
现在引用包含 4512942512
中该函数地址的框
再次将a
重新分配给3
点a
以引用其他地址。
>>> a = 9
>>> id(a)
140515915925784
>>> def a(x):
... return x
...
>>> id(a)
4512942512
>>> a
<function a at 0x10cfe09b0>
>>>
>>>
>>>
>>> a = 3
>>> id(a)
140515915925928
>>> a
3
>>>
答案 2 :(得分:4)
您将名称a分配给函数定义,然后将其重新分配给整数。
它在语法上是正确的,但它不是你想要的。
最好给函数语义名称描述你正在对传递给它们的参数做什么,并给出变量语义名称来描述它们指向的对象。如果你这样做,你将拥有更多可读代码,你肯定不会再犯这个错误。