我知道全局变量是在主作用域中创建的,要在函数内部为其赋值,我们需要使用关键字global。但是,要在函数中使用它(例如,打印它),我们不需要使用关键字global。例如:
s = 5
def foo1():
print(s)
s = 5
def foo2():
global s
s = 6
print(s)现在我试着这样做:
s = 5
def foo3():
print(s)
s = 'bbb'
print(s)我打电话给foo3()。我知道这是一个错误,因为我试图在没有使用关键字global的情况下在函数中赋值全局变量
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo3
UnboundLocalError: local variable 's' referenced before assignment但是,我感兴趣的是为什么foo3()中的第一个print(s)没有执行,并且当它试图运行它时,我得到了错误。在我尝试应用赋值(没有关键字global)之前,Python如何识别s是一个局部变量?
我假设当定义函数时,Python根据函数代码声明所有的局部变量,因此在赋值之前它知道s是一个局部变量,而不是全局变量。我试图找到关于这方面的信息,但是找不到(我肯定有一些我没有看到的信息)。
发布于 2021-11-09 11:28:41
定义函数时,Python根据函数代码声明其所有局部变量。
不是所有的局部变量!
在我看来,Python声明了函数的所有局部变量,这些变量在已定义或未定义的特定函数中可见,将它们与主变量分开,当您将其设置为全局变量时,读取或写入变量的值将直接存储到主变量中。
https://stackoverflow.com/questions/69896796
复制相似问题