为什么我不能再次调用这个函数?或者,我怎么才能做到呢?
假设我有这个函数:
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‘赋值给函数吗?
发布于 2014-03-04 10:35:21
执行此操作后:
a = 2a不再是一个函数,它只是一个整数(您重新分配了它!)。因此,如果你试图像调用一个函数一样调用它,解释器自然会报错,因为你正在这样做:
2()
=> TypeError: 'int' object is not callable底线:在Python中,不能同时有两个名称相同的东西,无论是函数、整数还是其他任何对象。只需使用不同的名称。
发布于 2014-03-04 10:59:59
Python中的名称通常是特定类型的identifiers,更像是命名一个存储变量/函数/方法或Python语言中的任何对象的框。当您重新分配时,您只是重命名了一个框。
你可以通过下面的操作找到答案。
最初,在位置140515915925784为a分配了一个值9。只要我对一个函数使用相同的标识符,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
>>>发布于 2014-03-04 10:35:58
将名称a分配给一个函数定义,然后将其重新分配给一个整数。
它在语法上是正确的,但它不是您想要的。
最好为函数提供语义名称,以描述您对传递给它们的参数所做的操作,并为变量提供语义名称,以描述它们所指向的对象。如果你这样做,你会有更多的可读性代码,你肯定不会再犯同样的错误。
https://stackoverflow.com/questions/22161717
复制相似问题