首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python如何识别函数中的变量是全局变量还是局部变量?

Python如何识别函数中的变量是全局变量还是局部变量?
EN

Stack Overflow用户
提问于 2021-11-09 10:49:51
回答 1查看 63关注 0票数 0

我知道全局变量是在主作用域中创建的,要在函数内部为其赋值,我们需要使用关键字global。但是,要在函数中使用它(例如,打印它),我们不需要使用关键字global。例如:

代码语言:javascript
复制
s = 5
def foo1(): 
    print(s)

s = 5
def foo2():
    global s
    s = 6
    print(s)

现在我试着这样做:

代码语言:javascript
复制
s = 5
def foo3():
    print(s)
    s = 'bbb'
    print(s)

我打电话给foo3()。我知道这是一个错误,因为我试图在没有使用关键字global的情况下在函数中赋值全局变量

代码语言:javascript
复制
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是一个局部变量,而不是全局变量。我试图找到关于这方面的信息,但是找不到(我肯定有一些我没有看到的信息)。

EN

回答 1

Stack Overflow用户

发布于 2021-11-09 11:28:41

定义函数时,Python根据函数代码声明其所有局部变量。

不是所有的局部变量!

在我看来,Python声明了函数的所有局部变量,这些变量在已定义或未定义的特定函数中可见,将它们与主变量分开,当您将其设置为全局变量时,读取或写入变量的值将直接存储到主变量中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69896796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档