所以我在Python中有这段代码,在其中定义了一些global
变量并在不同部分使用了它们
def compute_sigma(mellin, alpha_power, beta_power, input_path, qr_epsilon):
global tf
...
return taus, error_mellin, error_factorization
## first part
global tf
tf = ...
...
taus, error_mellin, error_factorization = compute_sigma(...)
sys.exit()
## second part
global tf ## where the warning is generated
tf = ...
...
taus, error_mellin, error_factorization = compute_sigma(...)
我试图通过退出sys.exit()
所在的程序来执行第一部分,但是似乎Python并没有完全忽略sys.exit()
之后的代码,它显示了以下警告消息< / p>
verification.py:257: SyntaxWarning: name 'tf' is assigned to before global declaration
第257行是最后一个global
定义所在的位置。
退出该程序是否有更聪明的方法?我尝试了os._exit ()
,exit()
和quit()
,但它们都不起作用。
另外,如果您需要重现警告,请告诉我,我可以提供一个玩具功能供您测试。
谢谢!
答案 0 :(得分:2)
TL; DR请勿在全局级别使用global
;它在那里没有任何作用,并且使解析器发疯。
global
仅在函数内部具有实际含义,因为这是对编译器的指令,列出的名称引用的是全局范围内的对象,而不是当前范围内的局部变量。
这是一个编译器指令,不是真正的语句;您不能在执行函数主体的过程中更改变量的性质。在整个作用域中,名称可以是本地名称,也可以是全局名称,无论global
语句可能出现在何处。
尽管如此,即使您在全局范围内使用global
,在分配给该名称之后也不会发生这种情况,由于语义上的原因并没有那么多,但是没有理由让解析器将其区别对待仅仅是因为您(不必要)在全局范围内使用了它。