类似的问题已经被提出和回答,但没有一个涉及这个具体问题。在
global EXAMPLE_GLOBAL
EXAMPLE_GLOBAL = True
def Setup():
if EXAMPLE_GLOBAL:
try:
#Doing some file io here
except:
global EXAMPLE_GLOBAL
EXAMPLE_GLOBAL = False
当运行这段代码(不是这段代码,这只是简单地划分为基本逻辑)时,我得到:
SyntaxWarning: name 'EXAMPLE_GLOBAL' is used prior to global declaration global EXAMPLE_GLOBAL
我的印象是,要更改全局变量的值,必须首先指定在转到新范围时引用的是全局变量。我是否需要第二个“global EXAMPLE_global”才能对全局进行更改,还是使用了相同的标识符?在
是的,没错。但按照惯例,全球声明应该在这一范围开始时发表。换句话说,把它放在函数的顶部。在
documentation显式建议不要在全局语句中使用块中的名称之前引用它:
在CPython中,违反此原则只会产生警告而不是错误,因为解析器忽略了块中全局指令的特定位置,但这是实现细节,将来可能会更改。在
(还要注意,您不需要在第一行使用
global
语句。顶级作用域中的每个名称在该作用域中都已经是全局的。)相关问题 更多 >
编程相关推荐