在下面的代码块中,我一直在试图理解python为什么会这样。我做了研究,但找不到一个好的答案,所以我来这里看看是否有人能为我指出正确的方向或提供一个很好的澄清。
我知道这和一些旧的ALGOL原理有关,但我并不完全理解。在var = 5
def func1():
print(var)
func1()
def func2():
var = 8
print(var)
func2()
def func3():
print(var)
var = 8
func3()
此代码的输出如下:
5
8
UnboundLocalError:赋值前引用了局部变量“var”
我理解为什么我们得到输出'5'和'8'。但是对于“func3()”,我期望的输出是“5”。看起来,解释器认为我想在函数中打印局部的'var',而不是全局的'var'。所以它抛出了这个错误。在
或者,如果变量定义在函数内部的某个地方,那么函数将默认为局部变量,而不是同名的全局变量。在
但是python为什么会这样呢?我不是在抱怨,我只是想了解一些事情。。。在
如何在函数中使用预定义的全局变量,然后在同一函数内定义同名的局部变量,而不更改全局变量的值?(当然是用python语言)
提前感谢在座的各位。你们真是了不起的人!:)
编辑1:感谢大家的回答。我完全理解在一个函数中使用一个预定义的全局变量,然后在同一个函数中定义一个同名的局部变量,这是一个糟糕而不实际的想法。我只是从理论的角度来思考,因为我在大学的一次演讲中看到了这一点。除息的
我找不到一个单独的用例,在这个用例中也最好这样做!
编辑2:我已经读过PEP8了,我知道显式比隐式好。:)
这是真的。否则,代码将混乱并导致错误。
这个问题只是关于一些无用的,不切实际的大学理论,我试图理解。
编辑3:
现在我完全明白为什么会发生这种事,以及发生了什么。感谢Randall Valenciano提供了一个指向blog的链接,很好地解释了这一点。
结果是函数被解释为一个整体,而不是逐行解释。因此,在解释函数时,任何已定义变量的变量声明都会移到函数的顶部。所以,当我们打印'var'时,函数使用的是本地声明的变量,它还没有赋值给它,然后解释器会抱怨它,抛出和错误。在
再次感谢大家!:)
你对我帮助很大!现在我终于明白了引擎盖下到底发生了什么。在