闭包举例释义

1、现状

在学习Python中,刚开始接触闭包时,难免不好理解,现以给“金瓶梅”加书名号为例,分解过程,进行说明。

2、代码区

话不多说,直接上代码:

def funcOut(func):
    def funcIn():
        return "《" + func() + "》"
    return funcIn
    
def bookName():
    return '金瓶梅'
    
bookName = funcOut(bookName)
print(bookName())

3、过程分析

简单来讲, 该代码区分为4各部分:
在这里插入图片描述
1-定义一个闭包;

2-定义bookName函数;

3-给bookName赋值;

4-打印bookName()

一、首先运行的是3

  • 即给bookName赋值,其中,funcOut(bookName)指的是调用函数funcOut,并传入参数bookName,可以看出,函数funcOut最终返回了函数funcIn,即它的内部函数,因此,函数bookName就等同于函数funcIn!!我们可以测试一下: 在这里插入图片描述
    在上面这个图,我们增加了打印两个id号,分别是闭包中的内部函数funcIn和函数bookName,可以在操作台中看出,两个id号一模一样,因此,在经过了给bookName赋值这一步,函数bookName就等同于函数funcIn了 !这个的理解非常重要!

    继续分析,参照下图,由于此时bookName作为参数传给func,并且内部函数又对func进行了调用,即对bookName进行了调用,因此调用了第7行代码的bookName,返回了字符串“金瓶梅”,因此此时的内部函数的返回值就是《金瓶梅》
    在这里插入图片描述

    • 最后执行了的是第12行代码,即打印对bookName调用的结果,也就是打印bookName的返回值,因为我们在第10行对bookName函数进行了重新的赋值,因此,不会再执行第7行代码,而是执行刚刚赋值过的bookName,即闭包的内部函数funcIn,而此时其返回值为《金瓶梅》,因此最终操作台的结果就是:《金瓶梅》

以上为个人理解,理解方式或有多种多样,欢迎讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值