案例1
x = 0
def set_x(n):
global x
if n%2==0:
x=n
else:
x = -1
set_x(10)
print(x)
预期输出:10
实际输出:10
此输出是非常期望的,这就是global
关键字的行为方式。
案例2
x = 0
def set_x(n):
if n%2==0:
global x
x=n
else:
x = -1
set_x(10)
print(x)
预期输出:0
实际输出:10
如果我对global
的理解是正确的,if块中global
的{{1}}关键字如何影响else块中的本地关键字global x
。我相信这是两个不同的块。
是否有这种行为的解释。
答案 0 :(得分:3)
global
语句是一个声明,它包含整个当前代码块。
if
未引入新的代码块。
块是一段Python程序文本,作为一个单元执行。以下是块:模块,函数体和类定义。
global
是解析器的指令。
if
正在运行时进行评估,但解析器会选择global
。解析器不关心也不能评估if
语句。
摘自https://docs.python.org/3/reference/simple_stmts.html#the-global-statement和https://docs.python.org/3/reference/executionmodel.html。
换句话说,函数定义中任何位置的任何global
语句始终适用于整个函数。