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

  • 相关阅读:
    Sql Server 中的 @@ERROR
    MVC 自定义HtmlHelper帮助类型之分页
    CI(CodeIgniter)框架中的增删改查操作
    WMAP 启动报错 PHP- 提示缺少 msvcr110.dll 的问题
    Bat命令学习 (转载)
    C# 实现刻录光盘功能
    几个操作、名词的说明
    CheckStateChanged(复选框选中状态更改事件)和 CheckedChanged(单选按钮选中状态更改事件)二者区别?
    关于设置Visaul Studio 2010 代码编辑界面背景的方法
    checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同
  • 原文地址:https://www.cnblogs.com/baxianhua/p/10761546.html
Copyright © 2011-2022 走看看