gpt4 book ai didi

python - 为什么全局关键字即使无法访问也不会被忽略? (Python)

转载 作者:行者123 更新时间:2023-11-28 20:54:48 24 4
gpt4 key购买 nike

我是编程和 Python 的新手,所以真的请原谅我的无知。

我刚刚了解到使用 global 可以使函数内部的变量成为全局变量。然而,我发现了一些不符合我预期的事情:

我在 Python 3.8 中尝试了以下代码(请原谅我的无知,因为我不知道我还应该提供什么信息):

>>> x = 0
>>>
>>> def function():
... if False:
... global x
... x = 1
...
>>> function()
>>> print(x)

结果是1。

但是,我希望代码与以下代码具有相同的效果:

>>> x = 0
>>>
>>> def function():
... x = 1
...
>>> function()
>>> print(x)

结果应该是0。

在我看来,if False 中的语句应该 执行,所以这对我来说听起来很奇怪。另外,我个人认为,在某些情况下,我希望函数内的变量(无论是局部变量还是全局变量)依赖于其他代码……我的意思是,我想更改 if False 到类似 if A == 'A' 的东西,而(我希望)我可以根据我的条件语句控制 x 是全局的还是本地的。

我试过把if改成while,还是一样的……没有死循环,但是代码global x 仍在执行/编译...

我承认这听起来可能很天真,也许它在 Python 中行不通,但我真的很想知道为什么......似乎代码 global x不可达,但怎么不被忽略?

谁能告诉我原因吗?我想知道更多关于编译背后的机制(?)

如有任何帮助,我们将不胜感激,谢谢!

最佳答案

在 python 中,global 语句(和 nonlocal 语句)与普通的 python 代码非常不同。本质上,无论函数中的 global 语句在哪里,它都会影响当前代码块,并且永远不会“执行”。您应该更多地将其视为编译器指令而不是命令。

请注意,语句本身必须在它修改的变量的任何使用之前出现,即

print(x)
global x

是语法错误。 global 语句只能修改整个代码块中的变量行为,你不能先有一个非全局变量,然后得到全局变量,你也不能有条件全局变量

(我真的找不到关于这种行为的好文档,here 它说 “全局语句是一个声明,它适用于整个当前代码块。”” global 是解析器的指令。它仅适用于与 global 语句同时解析的代码。” 但这对我来说似乎不是很清楚。)

python 中有更多的编译器指令,尽管它们看起来并不总是一个。一个是 from __future__ import statements它看起来像模块导入但改变了 python 行为。

关于python - 为什么全局关键字即使无法访问也不会被忽略? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899312/

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