[python] 作用域
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,
python的变量从作用域分为了以下几种:
- 局部作用域 L(local)
- 闭包函数外的函数中 E(Enclosing)
- 全局作用域 G(global)
- 内建作用域 B(build-in)
python执行时查找作用域的顺序是L-E-G-B,即:先在局部找,局部找不到去局部外的局部(闭包),然后是全局再到内建
局部变量
定义在函数内部的变量拥有一个局部作用域,被叫做局部变量
字符串、int等无法更改。
复杂的数据结构集合、字典、列表可以在函数作用域更改
global,nonlocal
global:指定当前变量使用外部的全局变量
nonlocal:修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
#!/usr/bin/python3
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
以上实例输出结果:
100
100