python--作用域
Python的作用域一共有4种,分别是:
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
修改全局变量 num:
num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) #1 num = 123 print(num) #123 fun1() print(num) #123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) #100 inner() print(num) #100 outer()