首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数和局部变量可以有相同的名称吗?

函数和局部变量可以有相同的名称吗?
EN

Stack Overflow用户
提问于 2021-12-16 10:34:55
回答 7查看 5.6K关注 0票数 47

下面是我的一个例子:

代码语言:javascript
复制
def foo():
    foo = 5
    print(foo + 5)

foo()
# => 10

该代码不会产生任何错误并完美地运行。这与这样的观点相矛盾,即变量和函数不应该有相同的名称,除非重写它们。为什么要工作?,当应用于实际代码时,我应该使用不同的函数/局部变量名,还是完全正确?

EN

Stack Overflow用户

发布于 2021-12-17 01:39:45

其他人还没有提到: Python是一种动态语言,很少进行静态检查。所以当你写

代码语言:javascript
复制
def foo():
    foo = 5
    print(foo + 5)

你可能一直认为这是一个“矛盾”-- foo怎么能同时成为一个函数和一个整数变量?一阶答案是“这是两个不同的foo”,因为内部foo只是一个局部变量,与全局名称foo无关。但是让它成为全球性的,并且代码仍然有效!

代码语言:javascript
复制
def foo():
    global foo
    foo = 5
    print(foo + 5)

foo()  # OK, prints 10

在这段代码中只有一个foo!然而,它不是“一个变量和一个函数”。首先,在第1-4行中,我们将foo定义为一个具有特定主体的函数,但我们尚未执行该主体。在第4行之后,全局foo包含一个函数。然后,在第6行中,我们实际上调用了foo引用的函数,它执行它的主体。身体做的第一件事就是把5分配给foo.现在,foo持有一个整数。通过运行为foo分配一个新值的代码,我们改变了foo的值。它以前是那个函数,现在是5。在像Python这样的动态类型语言中,这没有什么问题。

代码语言:javascript
复制
def foo():
    global foo
    foo = 5
    print(foo + 5)

foo()  # OK, prints 10 (and incidentally assigns a new value to foo)
foo()  # Raises TypeError: 'int' object is not callable
票数 30
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70377512

复制
相关文章

相似问题

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