美文网首页
python之闭包

python之闭包

作者: candice0430 | 来源:发表于2022-02-23 20:15 被阅读0次

1、什么是闭包?

2、闭包有什么用?

3、闭包的应用场景?


今天带着以上三个问题来学习闭包。

首先说明:闭包,并不是python独有的,是在支持头等函数的编程语言中实现词法绑定的一种技术。

1.嵌套函数

在学习闭包之前,我们先来看看嵌套函数。

# 普通函数:嵌套函数

def normal():

        msg = '这是一个普通嵌套函数'

         def print_msg():

                nonlocal msg msg += "hhhh"

                print(msg)

            print_msg()

 

嵌套函数定义 嵌套函数调用

    

2.闭包

先来上一个闭包的例子,咱们再来分析哦:

# 闭包函数例子1

def closure():

       msg = '这是一个闭包函数,这个msg是外部自由变量'

        def inner():

                print(msg)

       ·return inner

闭包函数 闭包函数调用

以上就是一个闭包函数哦,接着我们来分析一下组成闭包函数的条件。

2.1 闭包的条件:

(1)我们必须有一个嵌套函数(函数在函数内部)。

(2)嵌套函数必须引用在封闭函数(外部自由变量)中定义的值。

(3)封闭函数必须返回嵌套函数。

看到这里可以比对一下嵌套函数哦,1中的嵌套函数也是引用了封闭函数中定义的变量,但是返回这里没有返回嵌套函数,所以不能是一个闭包。1

2.1 闭包的定义:

接下来咱们再来分析下闭包的定义到底是什么?

首先,看下维基百科上的解释是:

在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

其实,看完这个,感觉有点绕。

用自己的理解,自己的语言来说闭包,我觉得闭包是什么呢?

闭包本质上就是一个函数,有两部分组成:函数和自由变量。

闭包使得这些变量的值始终保存在内存中。

下图中的add2就是一个闭包,它由函数wrapper和变量x组成!

闭包例子2

2.2  闭包的自由变量:

    为什么说闭包的自由变量始终在内存中呢?可以理解为闭包中的自由变量存储在cell 对象的cell_contents !!!

    所有函数都有一个 __closure__属性,如果这个函数是一个闭包的话,那么它返回的是一个由 cell 对象 组成的元组对象。cell 对象的cell_contents 属性就是闭包中的自由变量。

 闭包的自由变量

3.为什么要用闭包呢?

    结合以上的例子,个人理解:闭包避免了全局变量的使用。

  (1)、 全局变量容易被篡改。

    (2)   、 闭包中的自由变量就相当于对象中的一个属性。 其实在对象函数较少时,为了简便,就可以直接使用闭包来实现,而不用对象也可以。

4. 闭包的应用场景

(1) 装饰器

    

相关文章

  • python函数之闭包

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

  • python闭包学习

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

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • python之闭包

    闭包的概念 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭...

  • Python之——闭包

    一直觉得这个概念糊涂,其实,只是名字让人觉得糊涂,实际上理解了也挺容易的。 内部函数对外部函数作用域里变量的引用(...

  • Python之闭包

    很多高级语言都支持闭包,面试的时候也可能会问到,这可以作为对Python水平的一个参考。先看看百科的解释: 在计算...

  • python之 闭包

    定义 首先,什么是闭包呢? 简单的理解就是一个内建函数,什么样的内建函数呢? 就是里面的函数会使用到外层函数中变量...

  • python之闭包

    1、什么是闭包? 2、闭包有什么用? 3、闭包的应用场景? 今天带着以上三个问题来学习闭包。 首先说明:闭包,并不...

网友评论

      本文标题:python之闭包

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