当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:
局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。
全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python将使用这个变量然后停止搜索。
内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。
如果Python在这些名字空间找不到 x,它将放弃查找并引发一个 NameError
的异常,同时传 递 name x is not defined
这样一条信息
a = 10
def fun():
a = 1111111
d = 1111111
print locals() # {'a': 1111111, 'd': 1111111}
# print c #NameError: global name 'c' is not defined
print globals() # {'a': 10, 'abc': <module 'abc' from '/usr/lib/python2.7/abc.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/home/an/PycharmProjects/untitled/class_study.py', 'traceback': <module 'traceback' from '/usr/lib/python2.7/traceback.pyc'>, '__package__': None, 'fun': <function fun at 0x7f4b1209a410>, '__name__': '__main__', '__doc__': None}
fun()
# print d #NameError: name 'd' is not defined