作用域:变量起作用的范围
Local 局部作用域:函数内部
Enclosing 外部嵌套作用域:函数嵌套
Global 全局作用域:模块(.py文件)内部
Builtin 内置模块作用域:builtins.py文件
变量名的查找规则
由内到外:L -- E -- G -- B
在访问变量时,先查找本地变量,然后是包裹此函数的外部,再是全局变量,最后是内置变量
局部变量
定义在函数内部的变量(形参也是局部变量)
只能再函数内部使用
调用函数时才被创建,函数结束后自动销毁
全局变量
定义在函数外部,模块内部的变量
在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)
global 语句
作用:在函数内部修改全局变量,在函数内部定义全局变量
语法:global 变量1,变量2,。。。
说明:在函数内部直接为全局变量赋值,视为创建局部变量;不能先声明局部变量,再用global声明为全局
nonlocal 语句
作用:nonlocal声明了将要在一个嵌套的作用域中修改的名称
语法:nonlocal name
说明:nonlocal语句在执行时,nonlocal声明的名称必须已经在一个嵌套的def作用域中赋值过,否则将会得到一个错误:不能 通过在嵌套的作用域中赋值来创建变量
nonlocal限制作用域查找仅为嵌套的def,不会在嵌套的模块的全局作用域或所有def之外的内置作用域中查找