【Python】闭包

如果在A函数中定义了一个B函数,那么我们要如何调用这个B函数呢?
这里就引入了闭包这个概念。

满足闭包的三个条件:

  1. 在函数中有嵌套函数
  2. 外层函数的返回值是内层嵌套函数的函数名
  3. 内层函数对外部作用域有非全局变量的引用,即使用外层函数的参数或者是外层函数定义的变量

这样说了可能还是不太清楚,具体示例如下:

def func(num):
    print('这是外层函数的输出')
    def inner():
        print(F'调用外层函数的参数{num}')
        print('这是内层函数的输出')
    return inner

f = func(3)
print(f)
print(f())

结果:

这是外层函数的输出
<function func.<locals>.inner at 0x00000152434D02F0>
调用外层函数的参数3
这是内层函数的输出
None

第一行 实例化func(),所以输出了func外层函数的print内容。
第二行输出func()的实例化对象f,发现f其实是func内部的嵌套函数inner对象
第三行则是调用inner方法,于是输出了inner()中的内容。

以上代码满足了闭包的三个条件:

  1. func()中有嵌套函数inner()
  2. func()的返回值是 inner()的函数名,而并非 inner() 的实现
  3. inner()中调用的是func() 接收的参数,而非外部的全局变量

最后总结一下:
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:593462778,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:暗潮汹涌
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值