首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:同名的函数和变量

Python:同名的函数和变量
EN

Stack Overflow用户
提问于 2014-03-04 10:33:14
回答 3查看 27.3K关注 0票数 19

为什么我不能再次调用这个函数?或者,我怎么才能做到呢?

假设我有这个函数:

代码语言:javascript
复制
def a(x, y, z):
 if x:
     return y
 else:
     return z

我用以下方式调用它:

代码语言:javascript
复制
print a(3>2, 4, 5)

我得4分。

但是假设我声明了一个与函数同名的变量(错误地):

代码语言:javascript
复制
a=2

现在,如果我尝试这样做:

代码语言:javascript
复制
a=a(3>4, 4, 5)

或者:

代码语言:javascript
复制
a(3>4, 4, 5)

我会得到这样的错误:"TypeError:'int‘对象不可调用“

不能将变量'a‘赋值给函数吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 10:35:21

执行此操作后:

代码语言:javascript
复制
a = 2

a不再是一个函数,它只是一个整数(您重新分配了它!)。因此,如果你试图像调用一个函数一样调用它,解释器自然会报错,因为你正在这样做:

代码语言:javascript
复制
2()
=> TypeError: 'int' object is not callable

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

票数 28
EN

Stack Overflow用户

发布于 2014-03-04 10:59:59

Python中的名称通常是特定类型的identifiers,更像是命名一个存储变量/函数/方法或Python语言中的任何对象的框。当您重新分配时,您只是重命名了一个框。

你可以通过下面的操作找到答案。

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

a重新分配给3会再次将a指向不同的地址。

代码语言:javascript
复制
>>> 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
>>>
票数 7
EN

Stack Overflow用户

发布于 2014-03-04 10:35:58

将名称a分配给一个函数定义,然后将其重新分配给一个整数。

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

最好为函数提供语义名称,以描述您对传递给它们的参数所做的操作,并为变量提供语义名称,以描述它们所指向的对象。如果你这样做,你会有更多的可读性代码,你肯定不会再犯同样的错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22161717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档