0. 命名空间
- 变量作用域
1. 变量作用范围:可操作范围 2. Python 是静态作用域,变量的作用域源于它在代码中的位置 3. 在不同的位置,可能有不同的命名空间
- 命名空间
1. 作用域的体现形式 2. 不同的变量具体的操作范围
- LEGB
1. Local:函数内的命名空间 作用范围:当前整个函数体范围 2. Enclosing function locals:外部嵌套函数的命名空间 作用范围:闭包函数 3. Global:全局命名空间 作用范围:当前模块(文件) 4. Builtin:內建模块命名空间 作用范围:所有模块(文件) 5. 规则:按照 L -> E -> G -> B 顺序进行查找 6. 注意:Python 中没有块级作用域
1. 变量类型
- 局部变量
1. 函数参数和函数内部定义的变量 2. 作用域为函数内部 3. 查看局部变量:locals() def get_num(num): a = 10 print(locals()) get_num(100)
- 全局变量
1. 內建变量和函数外部定义的变量 2. 內建变量作用域为所有文件,内部全局变量作用域为 从定义的那一行 到 当前文件结尾 3. 查看全局变量:globals() g_num = 10 __name__ = "luck" def test(): print(globals()) test()
- 注意
1. 访问原则:从内到外 2. 结构规范:(1) 定义全局变量 (2) 定义函数 (3) 后续代码 3. 操作:(1) 获取,就近原则 (2) 修改,global 修饰全局变量,nonlocal 修饰局部变量 g_a = 666 def get_num(): global g_a g_a = 888 b = 10 def test(): nonlocal b b = 100 test() print(g_a) print(b) get_num()