在python中从全局范围解析变量

2024-04-20 07:08:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图更好地理解python中的作用域。我有以下玩具的例子:

a = 1
print "in global: " + str(a)

def g():
    a += 1
    print "in g(): " + str(a)


def f():
    a += 1
    print "in f(): " + str(a)
    g()

f()

我希望它运行并再次打印1然后2然后2。但是,我得到了一个错误:

UnboundLocalError: local variable 'a' referenced before assignment

我本以为g()f()都会把a从全局范围中拉出来。不正确?你知道吗

更新时间: 感谢您的回答,但不清楚的是:如果我只想读取全局变量a,并将其赋给我创建的局部变量a,这可能吗?你知道吗

我这样做的原因是我试图弄清楚g()是在调用时继承f()的作用域,还是在定义它的全局作用域?你知道吗


Tags: inlocaldef错误全局作用域variableglobal
3条回答

你在函数g和f中缺少全局操作 像这样:

a = 1

def g():
    global a
    a += 1
    print "in g(): " + str(a)

def f():
    global a
    a += 1
    print "in f(): " + str(a)

您可以在documentation herestack overflow here中找到有关全局和局部变量的更多信息

因为在cd1的函数的作用域中,没有什么是不想改变的。如果要在函数中更改a,则需要使用“global”:

a = 1
print "in global: " + str(a)

def g():  
    global a
    a += 1
    print "in g(): " + str(a)


def f():
    global a
    a += 1
    print "in f(): " + str(a)
    g()

要打印出全局a,请按以下方式使用它:

def f():
    print a
    new_a = a
    print new_a

有一个关于global^{}的好例子

如果要将局部变量a与全局值a一起使用^{}

def g():  
    a = globals()['a']
    a += 1
    print "in g(): " + str(a)

您需要使用global关键字。你知道吗

>>> a = 1         
>>> def g():      
...     global a  
...     a += 1    
...     print a   
...               
>>> g()           
2    

相关问题 更多 >