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

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中的任何其他对象.只需使用其他名称即可.

  • 对于以下语言来说确实如此:1) 函数是一等公民,2) 类型是动态的;在静态类型语言中,您不能将数字重新分配给声明为存储函数的变量。 (3认同)

dur*_*rga 5

python中的名称通常identifiers用于特定类型,更像是命名一个存储变量/ function/method或python中的任何对象的框.重新分配时,您只需重命名一个方框.

你可以通过以下方式找到它.

最初在位置a 分配一个值.当我使用相同的标识符的功能,现在是指含有一个盒该函数的地址9140515915925784a4512942512

重新分配a3再分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)