首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能在Python中设置全局变量?

为什么我不能在Python中设置全局变量?
EN

Stack Overflow用户
提问于 2009-08-15 04:49:48
回答 4查看 55.3K关注 0票数 35

在Python中,全局变量是如何工作的?我知道全局变量是邪恶的,我只是在做实验。

这在python中不起作用:

代码语言:javascript
运行
复制
G = None

def foo():
    if G is None:
        G = 1

foo()

我得到一个错误:

代码语言:javascript
运行
复制
UnboundLocalError: local variable 'G' referenced before assignment

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-15 04:50:58

您需要global语句:

代码语言:javascript
运行
复制
def foo():
    global G
    if G is None:
        G = 1

在Python中,默认情况下指定为局部变量的变量。您需要使用global将它们声明为全局变量。另一方面,引用但未赋值的变量不会自动成为局部变量。这些变量引用封闭作用域中最接近的变量。

Python3.x引入了类似于globalnonlocal语句,但将变量绑定到其最近的封闭作用域。例如:

代码语言:javascript
运行
复制
def foo():
    x = 5
    def bar():
        nonlocal x
        x = x * 2
    bar()
    return x

此函数在被调用时返回10。

票数 67
EN

Stack Overflow用户

发布于 2009-08-15 04:51:33

您仍然需要在该函数中将G声明为全局:

代码语言:javascript
运行
复制
G = None

def foo():
    global G
    if G is None:
        G = 1

foo()
print G

它只是简单地输出

代码语言:javascript
运行
复制
1
票数 9
EN

Stack Overflow用户

发布于 2009-08-15 05:04:52

您需要将G声明为global,但原因是:每当您在函数中引用变量时,如果您在该函数中的任何位置设置该变量,Python都会假设它是一个局部变量。因此,如果该名称的局部变量在代码中不存在,您将获得UnboundLocalError。如果您实际上想要引用一个全局变量,那么您需要global关键字来告诉Python这就是您想要的。

如果您没有在函数中的任何位置为变量赋值,而只是访问它的值,那么Python将使用该名称的全局变量(如果存在)。所以你可以这样做:

代码语言:javascript
运行
复制
G = None

def foo():
    if G is None:
        print G

foo()

这段代码打印None,并且不抛出UnboundLocalError。

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

https://stackoverflow.com/questions/1281184

复制
相关文章

相似问题

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