1.作用域的基本概念
-
变量的作用域
- python是静态作用域,也就是说在python中,变量的作用域源于它在代码中的位置。在不同的位置,可能有不同的命名空间
-
命名空间
- 作用域的具体形式
-
Python—LEGB
- L-Local
- 函数内的命名空间
- 作用范围:当前整个函数体范围
- E-Enclosing function locals
- 外部嵌套函数的命名空间
- 作用范围:闭包函数
- G-Global
- 全局命名空间
- 作用范围:当前模块(文件)
- B-Builtin
- 内建模块命名空间
- 作用范围:所有模块(文件)
- 注意
- python中没有块级作用域,如代码块中,比如if while for后面的代码块
- LEGB规则
- 按照 L -> E -> G -> B的顺序进行查找
- L-Local
2.基于命名空间的常见变量类型
- 局部变量
- 在一个函数内部定义的变量
- 作用域:函数体内部
- 查看局部变量 locals()
- 全局变量
- 在函数外部,文件最外层定义的变量
- 作用域为整个文件内部
- 查看全局变量 globals()
- 注意点
- 访问原则 从内到外
- 结构规范
- 全局变量和局部变量重名
- 命名
a = 666#全局变量
nonlocal e = 5
def test():
b = 9#局部变量
global c = 55#加关键字说明 全局变量
locals()
globals()