dvs*_*iva 14 python variables function
我的问题是为什么我不能再次调用该函数?或者,如何做到这一点?
假设我有这个功能:
def a(x, y, z):
if x:
return y
else:
return z
Run Code Online (Sandbox Code Playgroud)
我称之为:
print a(3>2, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我得到4.
但想象一下,我声明一个与该函数同名的变量(错误地):
a=2
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试做:
a=a(3>4, 4, 5)
Run Code Online (Sandbox Code Playgroud)
要么:
a(3>4, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我将得到此错误:"TypeError:'int'对象不可调用"
不能将变量'a'赋值给函数?
Ósc*_*pez 22
执行此操作后:
a = 2
Run Code Online (Sandbox Code Playgroud)
a不再是一个函数,它只是一个整数(你重新分配它!).所以如果你尝试调用它就好像它是一个函数,解释器会自然会抱怨,因为你这样做:
2()
=> TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)
结论:你不能同时拥有两个具有相同名称的东西,无论是函数,整数还是Python中的任何其他对象.只需使用其他名称即可.
python中的名称通常identifiers用于特定类型,更像是命名一个存储变量/ function/method或python中的任何对象的框.重新分配时,您只需重命名一个方框.
你可以通过以下方式找到它.
最初在位置a 分配一个值.当我使用相同的标识符的功能,现在是指含有一个盒该函数的地址中9140515915925784a4512942512
重新分配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
>>>
Run Code Online (Sandbox Code Playgroud)