L-----local 局部名字空间
E-----enclosing 直接外围空间
G-----global 全局名字空间
B-----builtin 内建名字空间
静态:在编译为字节码时名字的引用就定下了。
LEGB.py
a=1
def func():
print a
a='adsf'
func()
输出:
Traceback (most recent call last):
File "C:/Python25/legb.py", line 5, in <module>
func()
File "C:/Python25/legb.py", line 3, in func
print a
UnboundLocalError: local variable 'a' referenced before assignment
上例中print a 中的a并不是全局空间中的a。由于在局部空间中有a,但在print a 之前未赋值所以出错了。
要想在局部名字空间中用全局中的a,用global a声明。用del a删除后还可再创建局部的变量a.
LEGB.py
a=1
def func():
global a
print a
del a
a='adsf'
print a
func()
print a