下面是我的一个例子:
def foo():
foo = 5
print(foo + 5)
foo()
# => 10该代码不会产生任何错误并完美地运行。这与这样的观点相矛盾,即变量和函数不应该有相同的名称,除非重写它们。为什么要工作?,当应用于实际代码时,我应该使用不同的函数/局部变量名,还是完全正确?
发布于 2021-12-17 01:39:45
其他人还没有提到: Python是一种动态语言,很少进行静态检查。所以当你写
def foo():
foo = 5
print(foo + 5)你可能一直认为这是一个“矛盾”-- foo怎么能同时成为一个函数和一个整数变量?一阶答案是“这是两个不同的foo”,因为内部foo只是一个局部变量,与全局名称foo无关。但是让它成为全球性的,并且代码仍然有效!
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这样的动态类型语言中,这没有什么问题。
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 callablehttps://stackoverflow.com/questions/70377512
复制相似问题