闭包函数
1.全局变量与局部变量
"""
全局变量:在函数外部或者在函数内部使用global定义的变量叫做全局变量
局部变量:在函数内部定义的变量叫内部变量
作用域:作用范围
全局变量:横跨整个文件
局部变量:只在函数内部
生命周期:变量存活的时间
内置变量>全局变量>局部变量
"""
"""
如果函数外部没有该全局变量,可以通过global在函数内部创建一个全局变量
如果函数外部有该全局变量,可以通过global修改全局变量
"""
2.函数名的使用
# 函数名可以像变量一样
"""
创建
删除销毁
当参数传递
作为返回值
作为容器中的元素
"""
3.函数的嵌套
"""
相互嵌套的两个函数:外层的函数是外函数,内层的函数是内函数
内部函数在函数内部调用时:必须先定义,才能调用,没有预加载机制
LEGB就近原则:
从内向外依次寻找
"""
4.局部变量与全局变量相关函数
1.global 内函数可通过global创建,修改全局变量
2.nonlocal专门修改局部变量:就近原则
"""
先找当前作用域上一层空间的变量进行修改
如果上一层不存在,继续向上一层空间进行寻找
直到最后找不到,直接报错
"""
3 locals() 获取当前作用域的变量
"""
在函数外,获取的是打印之前的所有全局变量
在函数内,获取的当前作用域调用之前的所有局部变量
locals()返回的是一个字典
"""
4 globals() 获取的是全局变量
"""
无论函数内外,获取的都是打印之前的所有的全局变量
globals()返回的是系统内置的一个字典
可以通过向内置字典中添加键值对的方式,来实现全局变量的创建
"""
# 批量创建全局变量
def func():
dic=globals()
for i in range(5):
dic["a{}".format(i)]=i #批量创建5个全局变量
return dic
res=func() #调用函数
print(a1,a2,a3) #打印全变量值 1 2 3,查看是否定义成功
print(res)
5.闭包函数
# 闭包函数:
"""
相互嵌套的两个函数
内函数使用了外函数的变量
外函数将内函数返回return的过程叫闭包
返回的内函数叫做闭包函数
"""
# 闭包函数的特点和意义:
"""
特点:延长变量的生命周期,直到脚本运行结束
意义:闭包可以优先使用内函数中的变量,并对闭包中的值起到了封装保护的作用,外部无法访问
"""
def outer(a):
def inner():
print(a)
return inner
res=outer(11)
res()
# 判断函数是不是闭包函数
"""
__closure__:如果返回None,函数不是闭包函数,否则是闭包函数
cell_contents:获取closure中的单元,随机获取
"""
6.匿名函数
"""
用一句话来表达,只有返回值的函数叫做匿名函数
语法:lambda 参数:返回值 (不用return)
特点:简洁,高效
"""
# 无参的匿名函数
func=lambda :"dksl"
print(func())
# 有参数 的匿名函数
func=lambda a:print(a)
func(22)
# 带有判断条件的匿名函数
func=lambda a,b: a if a>b else b
res=func(11,22)
print(res)
# 三元运算(只能在双项分支上可以使用)
"""
语法:
真值 if 条件表达式 else 假值
条件表达式成立返回真值,否则返回假值
"""