命名空间

当一行代码要使用变量 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
原文地址:https://www.cnblogs.com/jijizhazha/p/7193509.html