块内python中的全局关键字行为

时间:2018-04-27 07:05:42

标签: python global-variables

案例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。我相信这是两个不同的块。

是否有这种行为的解释。

1 个答案:

答案 0 :(得分:3)

  1.   

    global语句是一个声明,它包含整个当前代码块。

    if未引入新的代码块

      

    是一段Python程序文本,作为一个单元执行。以下是块:模块,函数体和类定义。

  2.   

    global是解析器的指令。

    if正在运行时进行评估,但解析器会选择global。解析器不关心也不能评估if语句。

  3. 摘自https://docs.python.org/3/reference/simple_stmts.html#the-global-statementhttps://docs.python.org/3/reference/executionmodel.html

    换句话说,函数定义中任何位置的任何global语句始终适用于整个函数。