zoukankan      html  css  js  c++  java
  • python 什么是闭包

    1.啰嗦一下

    学这个知识点的时候,我本来想先了解下定义, 知道个大概再说, 翻了几篇博客,基本上都是有例子带着进入理解这块。即使读了定义,思想还是不能显出个框架。 想吃快餐,有些行,有些就不可以(这里仅代表我自己)。

    有个词叫格物致知,《现代汉语词典》2012年发行的第六版将“格物致知”解释为:“推究事物的原理,从而获得知识。”

    以后学习着急的时候就用这个词 “格物致知” 来先放慢脚步。

    2.定义

    字面的定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)

    3.举个栗子,再解释一下

    看例子

     

    函数可以作为另一个函数的参数或返回值,可以赋给一个变量。函数可 以嵌套定义,即在一个函数内部可以定义另一个函数,有了嵌套函数这种结构,便会产生闭包问题。

     内嵌函数inF(),引用了外层函数的变量sum,

    当我们用不同参数调用outF()是,得到的结果是隔离的

    也就是说每次调用outF()函数后都将生成并保存一个新的局部变量sum。其实这里outF()函数返回的就是闭包。

    在函数式语言中,当内嵌函数体内引用到体外的变量时,将会把定义时涉及到的引用环境和函数体打包成一个整体(闭包)返回。

    现在给出引用环境的定义就 容易理解了:引用环境是指在程序执行中的某个点所有处于活跃状态的约束(一个变量的名字和其所代表的对象之间的联系)所组成的集合。闭包的使用和正常的函 数调用没有区别。

    4.再举个栗子,内嵌函数带参数

     这里c返回的就是内嵌函数addy()

    c(10)也就是指addy(10),

     5.闭包的用途

    用途1,当闭包执行完后,仍然能够保持住当前的运行环境。

    用途2,闭包可以根据外部作用域的局部变量来得到不同的结果,这有点像一种类似配置功能的作用,我们可以修改外部的变量,闭包根据这个变量展现出不同的功能。

     6.总结如何创建一个闭包

    在Python中创建一个闭包可以归结为以下三点:

    函数内嵌函数;

    内嵌函数需要引用上一级namespace中的变量;

    外围函数必须返回内嵌函数;

    通过这三点,就可以创建一个闭包,Python装饰器就是使用了闭包。

    参考:

    https://www.cnblogs.com/JohnABC/p/4076855.html

    https://www.jianshu.com/p/1de5db830a44?utm_campaign

  • 相关阅读:
    js正則表達式语法
    购买DigtalOcean VPS 以及 连接Linux
    UVA 246
    牵一发动全身【Nhibernate基本映射】
    jquery.validate+jquery.form提交的三种方式
    [Python] 发送email的几种方式
    递归算法浅谈
    最小二乘法多项式曲线拟合原理与实现
    王立平-Android中对图像进行Base64编码
    [置顶] EasyMock的简单使用
  • 原文地址:https://www.cnblogs.com/baxianhua/p/10761546.html
Copyright © 2011-2022 走看看