美文网首页
请解释python中的闭包

请解释python中的闭包

作者: 转身丶即天涯 | 来源:发表于2019-08-21 01:28 被阅读0次

闭包(closure)的概念

闭包是指延伸了作用域的函数,此作用域中的变量声明周期和函数一样,即使离开创建的作用域也不外。

手写一个闭包

def print_msg():
    msg = "hello world"

    def printer():
        print(msg)

    return printer


p_msg = print_msg()
p_msg()

请解释一下,你写的程序

在print_msg函数内部定义了一个msg变量和printer函数,并在printer函数内部使用了msg变量,最终将printer函数对象作为print_msg函数的返回结果。
当我们调用print_msg函数时,会得到一个p_msg对象,它就是printer函数对象。但是在printer函数的内部并不存在局部变量msg,这是msg变量是从print_msg函数中引入的。
在调用p_msg函数对象时,其实我们执行的是带有msg变量的printer函数。这样的情况下,p_msg被称为是闭包。

python函数对象有一个closure属性,如果如果这是一个闭包,obj.closure会返回一个cell对象,这个cell对象有一个cell_contents属性,可以在cell_contents中看到自由变量的值。
这也解释了为什么变量脱离了作用域后,依然还可以在函数中使用。原理就是引用变量的值会被存储到cell对象的cell_contents属性中。

cell对象结构

相关文章

  • 请解释python中的闭包

    闭包(closure)的概念 闭包是指延伸了作用域的函数,此作用域中的变量声明周期和函数一样,即使离开创建的作用域...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 关于Javascript闭包的总结

    关于闭包这个词的解释 维基百科中对于闭包的经典解释: 在计算机科学中,闭包(Closure)是词法闭包(Lexic...

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • Python的闭包

    # 闭包是函数编程的语法结构,简化程序,可重复使用行更加强 # python中的闭包从表现形式上定义(解释)为:如...

  • Python闭包的作用域理解

    什么是闭包 在维基中,闭包的解释是这样的: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Cl...

  • Swift底层进阶--011:闭包

    什么是闭包 维基百科中的解释:在计算机科学中,闭包(Closure),又称词法闭包(Lexical Closure...

  • Python 中的闭包

    Python 中的闭包:+ http://python.jobbole.com/82296/

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • 管窥python闭包

    什么是闭包?来看看wiki的解释 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Cl...

网友评论

      本文标题:请解释python中的闭包

      本文链接:https://www.haomeiwen.com/subject/tmjvsctx.html