python进阶-----第十六课 --闭包

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂

十六、闭包

16.1、认识闭包

>闭包的定义:在函数嵌套的前提下,内部函数使用了外部函数的变量(而如果内部函数里引用了外部函数里定义的对象(甚至是外层之外,但不是全局变量),那么此时内部函数就被称为闭包函数)并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包
>闭包的作用:可以保存外部函数内的变量
>构成条件:  
		a、在函数嵌套(函数里面再定义函数)的前提下
        b、内部函数使用了外部函数的变量或参数
        c、外部函数返回了内部函数
# 1、函数嵌套(形成闭包)
def func_out():  # 外部函数
    num1 = 10  # 外部函数的变量
    def func_inner(num2):  # 内部函数
        result = num1 + num2
        print(f"结果是:{result}")
    return func_inner  # c、外部函数返回了内部函数,所谓的闭包指的就是使用了外部函数的变量的内部函数

new_func = func_out()  # mew_func = func_inner  1.获取闭包  2.执行闭包:就是在执行内部函数中的代码 
new_func(20)
new_func(13)
# 结果:
>>> 结果是:30
>>> 结果是:23

16.2、闭包的使用

需求:根据配置信息使用闭包实现不同人的对话信息 例如对话:老板:丽丽到家了吗? 小徐:到家了 老板:到家多久了 小徐:已经睡着了,放心吧!
‘’’ 实现步骤:
a、定义外部函数接收不同的配置信息参数,参数是人名
b、定义内部函数接收对话信息参数
c、在内部函数里面把配置信息和对话信息进行拼接输出 ‘’’

def waibu_method(name):  # 外部函数接收姓名参数
    def neibu_method(msg):  # 内部函数接收对话信息
        print(name + ":" + msg)
    return neibu_method  # 外部函数返回了内部函数
# 获取闭包
wang = waibu_method("王总")
xu = waibu_method("小徐")
# 执行闭包
wang("丽丽到家了吗?")
xu("到家了")
wang("到家多久了")
xu("已经睡着了,放心吧!")
# 结果:
>>> 王总:丽丽到家了吗?
>>> 小徐:到家了
>>> 王总:到家多久了
>>> 小徐:已经睡着了,放心吧!

16.3、使用闭包保存外部函数中的变量

# 函数嵌套
def wbhs():  # 外部函数
    num1 = 10
    def nbhs():  # 内部函数# 内部函数使用了外部函数的变量或参数
        # global num1  # 在闭包中,在函数嵌套中不能使用global修改局部变量
        nonlocal num1  # 总结:在函数嵌套中需要使用nonlocal去声明为全局变量
        num1 = 18
        num3 = num1 + 16
        print(num3)
    # 修改前的num1
    print("修改前:", num1)
    nbhs()
    # 修改后num1
    print("修改后:", num1)
    return nbhs  # 外部函数返回了内部函数,所谓的闭包指的就是使用了外部函数的变量的内部函数

nb = wbhs()
nb()
# 结果:
>>> 修改前: 10
>>> 34
>>> 修改后: 18
>>> 34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值