在python中解析来自全局范围的变量

Ale*_*lex 3 python python-2.x python-2.7

我想更好地理解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()
Run Code Online (Sandbox Code Playgroud)

我希望这会运行并打印出来1然后2再打印出来2.但是,我得到了错误:

UnboundLocalError: local variable 'a' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我会想到两者g()并且f()a从全球范围中拉出来.不正确的?

更新:感谢您的答案,但不清楚的是:如果我只想读取全局变量a并将其分配给我创建的局部变量,还可以命名a吗?

我这样做的原因是我试图找出是否g()继承了f()调用它的范围或者定义它的全局范围?

mid*_*ori 5

你试图改变a函数的外部范围,a不在当前函数的范围内,这就是你得到这样一个错误的原因,因为你的函数一无所知a.如果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()
Run Code Online (Sandbox Code Playgroud)

a这种方式打印全局使用它:

def f():
    print a
    new_a = a
    print new_a
Run Code Online (Sandbox Code Playgroud)

有一个很好的例子 global here

如果你想使用a全局a使用值的局部变量globals:

def g():  
    a = globals()['a']
    a += 1
    print "in g(): " + str(a)
Run Code Online (Sandbox Code Playgroud)