【发布时间】:2021-12-16 10:34:55
【问题描述】:
这是我的意思的一个例子:
def foo():
foo = 5
print(foo + 5)
foo()
# => 10
代码不会产生任何错误并且可以完美运行。这与变量和函数不应该具有相同名称的想法相矛盾,除非您覆盖它们。 为什么会起作用?当应用于实际代码时,我应该使用不同的函数/局部变量名称,还是完全可以?
【问题讨论】:
-
补充一下khelwood所说的,由于内部
foo是一个局部变量,你实际上可以将foo声明为一个全局变量,并像这样分配给它。该函数仍将正确完成,并且对foo的任何进一步引用都将在分配的值中产生。 -
这样做你唯一真正破坏的是递归调用
foo的能力。如果您不需要这样做,我真的没有看到问题(尽管我也没有看到无缘无故隐藏全局变量的意义:几乎可以肯定有一个更好的名称可用于局部变量)。 -
@chepner 我要更进一步,强调你不应该有同名的变量和函数。即使它有效,一年后阅读代码的人也会感到困惑——包括你自己。
-
@MarkRansom 嗯,在 Pascal 中,这甚至是标准的,这就是您从那里的函数返回值的方式。有时我发现它比使用
result变量更清晰。 -
@KellyBundy 自从我写任何 Pascal 以来已经有 30 年了,你呢?这个问题专门针对 Python。你会在我的代码中找到很多
result,因为这是一个很好的约定。而且它是一种约定,不会使编写递归函数成为不可能。