python闭包是什么?python闭包的简单介绍(附示例)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python闭包是什么?python闭包的简单介绍(附示例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2190字,纯文字阅读大概需要4分钟。
内容图文
![python闭包是什么?python闭包的简单介绍(附示例)](/upload/InfoBanner/zyjiaocheng/429/a40425d38ebe4b8ba2844c775869178e.jpg)
什么是闭包?
其实我们在使用函数过程中不经意间就会触发闭包,因为总会出于某种原因会在函数内引用或修改上一层函数的变量,这时就会触发闭包
那么什么是闭包?其实就是函数嵌套时触发的一种规则,当前函数引用到上一层函数的局部命名空间的变量并且函数本身被当成对象返回时就触发该规则。
我们说触发了闭包的函数叫做闭包函数
闭包最大的特点就是它可以被外层函数返回后赋值给一个变量,并且携带了外层函数内定义的变量
例子如下:
def func1(): a = 2 #变量a为函数func1()开辟的局部命名空间内定义的变量 def func2(x): return x**a #函数fun2()内引用了变量a print('func2的id:',id(func2)) return func2 #内层函数名被当作返回值,此时闭包规则达成。 res = func1() # 此时res等同于func2,我们可以看看他们的id完全相同 print('res的id: ',id(res)) print(res(3)) del func1 print('删除函数func1之后:',res(5)) print(res.__closure__) print(type(res.__closure__[0])) print(res.__closure__[0].cell_contents) #此时,如果函数func2()没有引用外部函数变量a,我们可以试着把return x**a这句改成return x,这时函数func2就没有触发闭包规则 #此时如果再次打印res.__closure__,你会发现输出值为None
从下面输出结果可以看出,即使删除了函数func1,理论上应该消失的变量a依然可以使用(理论上a对应的局部空间消失了,则a应消失),变量a之所以仍然可以被引用,是因为闭包规则的作用,外部函数的局部变量可以被内部函数引用,即使外部函数已经返回了。
其实函数本身也是对象,而对象又有很多属性,其中和闭包相关的就是 closure 属性。
closure 属性定义的是一个包含 cell 对象的元组,其中元组中的每一个 cell 对象用来保存作用域中变量的值。
func2的id: 139940709362136 res的id: 139940709362136 9 删除函数func1之后: 25 #我们来打印一下res的__closure__属性,可以看出它是由cell对象组成的元组 (<cell at 0x7f467c4a8558: int object at 0x5654c2553a40>,) <class 'cell'> #打印类型结果就是元组 2 #打印cell中的值可以看出,这个cell对象中存储的变量值为2
触发闭包后,实现了引用上层局部命名空间变量的同时又不依赖于该局部空间,即使该变量所在的函数被删除了,闭包函数依然可以使用它,实际上闭包函数把它保存在了__closure__属性中。
以上就是python闭包是什么?python闭包的简单介绍(附示例)的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的python闭包是什么?python闭包的简单介绍(附示例)全部内容,希望文章能够帮你解决python闭包是什么?python闭包的简单介绍(附示例)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。