欢迎来到十九分快乐的博客

生死看淡,不服就干。

9.闭包函数

闭包函数

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 假值
    条件表达式成立返回真值,否则返回假值
"""

posted @ 2020-12-03 22:49  十九分快乐  阅读(66)  评论(0编辑  收藏  举报