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

问题描述 投票:2回答:1

我真的是编程和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更改为[ C0],而(我希望)我可以根据我的条件语句控制if A == 'A'是全局/局部。

我试图将x更改为if,但是相同...没有无限循环,但是代码while仍在执行/编译...

[我承认这听起来很幼稚,也许在Python中不起作用,但我真的很奇怪为什么...似乎代码global x无法访问,但是如何来不被忽略吗?

有人可以告诉我原因吗?我想更多地了解编译(?)

背后的机制

任何帮助将不胜感激,谢谢!

我对编程和Python真的很陌生,所以请原谅我的无知。我刚刚了解到,使用global可以使函数内部的变量成为全局变量。但是,我发现...

python global
1个回答
2
投票

在python中,global x语句(和global语句)与普通python代码有很大不同。本质上,无论函数中的nonlocal语句在哪里,它始终从一开始就影响整个函数,并且永远不会“执行”。您应该将其更多地视为编译器指令而不是命令。

© www.soinside.com 2019 - 2024. All rights reserved.