Python:具有相同名称的函数和变量

时间:2014-03-04 02:33:14

标签: python function variables

我的问题是为什么我不能再次调用该功能?或者,如何做到这一点?

假设我有这个功能:

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'分配给函数?

3 个答案:

答案 0 :(得分:18)

执行此操作后:

a = 2

a不再是函数,它只是整数(您重新分配了它!)。所以如果你尝试调用它就好像它是一个函数一样,解释器会自然会抱怨,因为你这样做:

2()
=> TypeError: 'int' object is not callable

底线:你不能同时拥有两个同时的东西,无论是函数,整数还是Python中的任何其他对象。只需使用其他名称即可。

答案 1 :(得分:5)

对于特定类型,python中的

名称通常为identifiers,更像是命名一个存储变量/函数/方法的框或python中的任何对象。 重新分配时,您只需重命名一个框。

您可以通过以下方式找到答案。

最初a在位置9分配了值140515915925784。 只要我对函数使用相同的标识符,a现在引用包含 4512942512 该函数地址的框

再次将a重新分配给3a以引用其他地址。

>>> 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分配给函数定义,然后将其重新分配给整数。

它在语法上是正确的,但它不是你想要的。

最好给函数语义名称描述你正在对传递给它们的参数做什么,并给出变量语义名称来描述它们指向的对象。如果你这样做,你将拥有更多可读代码,你肯定不会再犯这个错误。