打印全局变量的值,然后更改 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
,即使它发生在实际赋值之前。
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
,即使它发生在实际赋值之前。