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()调用它的范围或者定义它的全局范围?
你试图改变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)