案例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
的CC_7关键字如何影响Else Block中的本地关键字x
。我相信这些是两个不同的块。
有这种行为的解释。
-
global
语句是一项声明,可为整个当前代码块提供。if
不引入新的代码块。a block 是作为单位执行的Python程序文本。以下是块:模块,功能主体和类定义。
-
global
是解析器的指示。if
正在运行时评估,但是global
被解析器拾取。解析器不在乎,无法评估if
语句。
摘录摘自https://docs.python.org/3/reference/simple_stmts.html#the-global-statement和https://docs.pypython.org/3/3/reference-rreference-reference-lececution-/executiate-model.html.html。
换句话说,函数定义中的任何 global
语句始终在整个函数中都适用。