gpt4 book ai didi

python - 为什么 python 对变量有这种行为?

转载 作者:太空狗 更新时间:2023-10-29 21:20:33 25 4
gpt4 key购买 nike

<分区>

在下面的代码块中,我一直试图理解为什么 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 中)

在此先感谢大家。你们是了不起的人! :)

Edit_1:感谢大家的精彩回答。我完全理解在函数中使用预定义的全局变量,然后在同一函数中定义具有相同名称的局部变量是一个糟糕且不切实际的想法。我只是从理论的角度思考它,因为我在一次大学讲座中看到了它。 XD我找不到一个单一的用例,其中最好的做法是!

Edit_2:我已经阅读了 PEP8,并且我知道明确比隐含要好。 :)这是真的。否则代码会困惑并导致错误。这个问题只是关于一些我试图理解的无用且不切实际的大学理论。

Edit_3:现在我完全理解它为什么会发生以及这里发生了什么。感谢Randall Valenciano提供指向 blog 的链接这很好地解释了它。

发生的情况是函数被解释为一个整体,而不是逐行解释。因此,当解释函数时,任何已定义变量的变量声明都将移至函数的顶部。因此,当我们打印“var”时,该函数正在使用尚未为其分配任何值的局部声明变量,然后解释器会提示它并抛出错误。

再次感谢大家! :)你对我帮助很大!现在我终于明白引擎盖下发生了什么。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com