【发布时间】:2018-03-16 19:09:45
【问题描述】:
我在函数中寻找一些关于命名空间概念的解释。
这是一个会引发 UnboundLocalError: local variable … referenced before assignment
的代码x = 1
def foo():
print x
x = 2
我知道这应该引发异常。但我想了解 python 如何知道变量在本地命名空间中。在行 print x 处,x 不在局部变量 dict 中。
x = 1
def foo():
print 'local before print x : ',locals()
print x
print 'local after print x :',locals()
x = 2
foo() # call function, print local namespace before raising exception
local before print x : {}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in foo
UnboundLocalError: local variable 'x' referenced before assignment
在 print x 之前,local namespace dict 是空的 {}(这很明显)。那么python怎么知道x是局部变量呢。
这与类的工作方式不同
a = [1]
class b():
c = a
a = 2
print 'c inside class ', b.c
'c inside class [1]'
d = b()
类中类似情况不会引发异常。
如果有人可以帮我解释概念,python如何在赋值之前知道这个变量是局部变量。
我检查了许多表格和网站的解释,但没有找到任何解释。
有解释如何解决这种情况的帖子和表格。例子。 UnboundLocalError: local variable … referenced before assignment 。 但我正在寻找 python 在后面工作。
【问题讨论】:
标签: python python-2.7 function namespaces local-variables