全局变量和局部变量
局部变量:
定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
局部变量只能在函数内部使用
局部变量只有在函数调用时才能被创建,在函数调用结束后会自动销毁
局部变量说明:
在函数内首次对变量赋值是创建局部变量,再次为变量赋值是修改局部变量的绑定关系
在函数内部的赋值语句不会对全局变量造成影响
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块访问
全局变量:
定义在函数外部,模块内部的变量成为全局变量
所有的函数都可以直接访问局部变量,但函数内部不能直接通过赋值语句来改变全局变量
globals()和locals 函数
globals() 返回当前全局作用域内变量的字典
locals( ) 返回当前局部作用域内的变量的字典
函数变量:
函数名是变量,它在创建时绑定一个函数
一个函数可以作为另一个函数实参传递
函数作为另一个函数的返回值
函数的嵌套定义
函数嵌套定义是指一个函数里用def语句来创建其他函数的情况
Python的作用域:
作用域也叫命名空间,是访问变量时查找变量名的范围空间
Python的4个作用域: LEGB
作用域 英文解释 英文简写
局部作用域(函数内) Local(function) L
外部嵌套函数作用域 Enclosing function locals E
函数定义所在模块(文件)的作用域 Globals(module) G
python内置模块的作用域 Builtin(python) B
变量名的查找规则:
在访问变量时先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量
最后是内置变量
L ------> E ---------->G--------> B
默认情况下,变量名赋值会创建或者改变本地作用域变量
global 语句
作用:
告诉解释器,global语句声明的一个或者多个变量,这些变量的作用域
为模块级的作用域(也称全局变量)
全局声明(global)
将赋值的变量映射到模块文件内部的作用域
语法:
global 变量1, 变量2,…………
global说明:
全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
全局变量在函数内部不经过声明就可以直接访问
不能先创建局部变量,再用global声明为全局变量,不符合规则
global变量列表里的变量名不能出现在此作用域内形参列表里
nonlocal 语句:
作用:
告诉解释执行器,nonlocal声明的变量不是局部变量,也不是全局变量
而是外部嵌套函数内的变量
nonlocal的语法:
nonlocal 变量名1,变量名2……
说明:
nonlocal语句只能在被嵌套的函数内部使用
访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
当有两层或者两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作
nonlocal语句的变量列表里的变量名,不能出现在此函数参数列表中
lambda 表达式(又称匿名函数)
作用:
创建一个匿名函数对象
同def 类似,但不提供函数名
语法格式:
lambda[ 形参1, 形参2……] : 表达式
说明:
lambda只是一个表达式,它用来创建一个函数对象
当lambda表达式调用时,先执行冒号后的表达式,并返回表达式的结果的引用
lambda表达式创建的函数只能包含一条表达式、
lambda闭函数简单且可以随时创建和销毁,有利于减少程序的偶合度