打印全局变量的值,然后更改 python 中的值

Printing the value of a global variable and then changing the value in python

global 关键字在函数中用于引用该函数内的全局变量并对其进行修改。然而,即使不使用 global 关键字,如果我们只是尝试打印变量,python 会假定它是被引用的全局变量,并像这样简单地打印它。

a = 2
def foo():
    print(a)
foo()

上面的代码输出2。但是下面的代码会抛出错误。

a = 2
def foo():
    print(a)
    a = 3
foo()

我收到一个 UnboundLocalError,说局部变量 'a' 在赋值前被引用。现在由于 python 是一种解释型语言并且一次执行一行,它不应该首先打印 a 的全局值 2(就像第一种情况)然后创建一个具有相同的局部变量name ans assign it to 3. 在第二种情况下,解释器如何在 print 语句中知道我指的是下一行中的另一个变量 'a'?为什么它的行为方式与上述不同?

PS:我知道使用 global 关键字可以帮助我将 a 的值从 2 更改为 3。

Python 字节码解释; Python 源代码首先被编译 为字节码。

名称在单个范围内是局部的还是全局的,并且在编译时确定;你不能在一个函数中途切换。如果函数中有 any 赋值给 a ,那么它在函数中的任何地方都是局部的 everywhere 除非你使用 global a .

a = 2
def foo():
    global a
    print(a)
    a = 3

没有全局语句,print(a) 指的是本地名称 a,即使它发生在实际赋值之前。