if 中的 Python 全局变量 - elif

Python global variable in if - elif

提问人:Mark E 提问时间:4/1/2023 最后编辑:juanpa.arrivillagaMark E 更新时间:4/1/2023 访问量:113

问:

对不起,如果这是一个愚蠢的问题,我不是程序员。只是想了解如何在 if elif 语句中处理全局变量。全局变量 x(布尔值)可能会在其他地方以高频率更新,因此我需要 x 在 If 和 elif 条件语句中相同。基础代码是否在两个语句中使用相同的 x 值,或者是否每次都读取全局变量,因此这意味着它在两个条件语句中可能不同?

希望这是有道理的?

例如

global x

if x and not status:
    # Do some stuff

elif not x and status:
    # do some other stuff 

这只是一个试图理解如何处理全局变量的问题

python if 语句

评论

0赞 Marcelo Paco 4/1/2023
这回答了你的问题吗?stackoverflow.com/questions/423379/......
1赞 juanpa.arrivillaga 4/1/2023
另一件需要澄清的事情是,你有一个什么都不做的语句,它在全局范围内。但是,即使我们假设我们处于局部作用域中,您也不需要仅仅在非全局作用域中引用全局变量。您只需要将该语句分配给非全局作用域中的全局变量。即,默认情况下,分配是本地globalglobal xglobal
2赞 juanpa.arrivillaga 4/1/2023
@PoneyUHC 不,绝对不是。这将违反 Python 的语义。
2赞 chepner 4/1/2023
每次需要它时,它都会读取;如果您有另一个线程正在更新,则存在争用条件。您可能希望使用锁来确保在使用它时没有其他线程可以更新。xxx
1赞 Barmar 4/1/2023
没什么特别的。它们与引用同一变量的任何其他顺序语句没有什么不同。if/elif

答:

0赞 Blckknght 4/1/2023 #1

在编写它时,您的代码将分别在 和 条件中为您加载该值两次不同的时间。该变量的性质并没有真正考虑这一点(函数中的局部变量也是如此)。xifelifglobal

如果只想读取一次,则可以重写复合条件,改用 和 来测试 ,并带有处理测试的内部语句:xifelsexifstatus

if x:
    if not status:
        # do stuff
else:                  # this is the big change, no second test of x here!
    if status:
        # do other stuff
0赞 JL Peyret 4/1/2023 #2

只是把它作为一种可能的方法,对整个决策结构的影响最小,如果是一个简单的变量。 可能适用于更复杂的变量。xcopy.deepcopy

这类似于在注释中提到的 x 不可变时使用。y = x

然而,正如我在评论中所说,依赖快速变化的全局变量来驱动处理和决策的设计似乎在自找麻烦。

import copy

global x

#take a copy and then use for this pass 
x2 = copy.copy(x)


if x2 and not status:
    # Do some stuff

elif not x2 and status:
    # do some other stuff