当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:
1.局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。
2.全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python将使用这个变量然后停止搜索。
3.内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。

locals()

当前函数或类的方法里面的所有局部变量
如果在模块中用而不是放在函数里,则与globals()一样

globals()

返回所有的全局变量
如果用在函数中也只会返回全局变量,不会返回函数中的局部变量

局部名字空间可以通过内置的locals函数来访问。
全局(模块级别)名字空间可以通过globals函数来访问

另外还有很重要的一点
locals() 只读, globals() 可读可写
例如:

  1. def test():
  2. globals()['a2'] = 4
  3. test()
  4. print a2 # 输出 4