什么是闭包

在维基中,闭包的解释是这样的:

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

我们来看一个简单的实例:

def outer(arg):

def inner():

print arg * arg

return inner

>>> f = outer(2)

>>> f()

4

内部函数inner调用外部函数outer的局部变量arg,它保存了outer的arg值。这就是闭包。

从作用域的角度理解

把上面的例子改一下,在函数内部输出局部命名空间:

def outer(arg):

print locals()

def inner():

x = arg * arg

print locals()

print x

return inner

>>> f = outer(2)

{'arg': 2}

>>> f()

{'x': 4, 'arg': 2}

4

>>>

在outer中,局部命名空间只有一个键arg,而在inner内部也有arg。上面说的inner保存了outer的arg值,我们就可以理解为inner的局部命名空间保存了arg。

这么一理解,就会发现闭包其实就这么简单。

另外再瞎扯一句,python中的装饰器其实就是闭包。

python什么是闭包的作用域_Python闭包的作用域理解相关推荐

  1. python中闭包的作用_Python闭包及其作用域

    Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...

  2. python闭包实现原理_Python 闭包详解

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...

  3. python闭包的条件_python闭包

    python闭包 闭包的条件 1.闭包函数必须返回一个函数对象 2.闭包函数内部的函数必须引用外部的函数的变量,(一般不能引用全局的变量),里面函数的返回值可有可无 闭包格式 def 外层函数(参数) ...

  4. python闭包修改全局变量_Python 闭包 自由变量

    理解:封闭的东西:保证数据的安全 #平均收盘价 方案一数据是不安全的 l1 = [] def make_average(new_value): l1.append(new_value) total = ...

  5. python内置作用域_python中的作用域

    python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...

  6. python函数的作用域_python函数的作用域和引用范围

    以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...

  7. python函数的作用域_Python之函数作用域

    1.作用域介绍 也叫名称空间全局名称空间:创建的存储"变量名与值的关系"的空间叫做全局名称空间 局部名称空间:在函数的运行中开辟的临时的空间叫做局部名称空间 内置名称空间:内置名称 ...

  8. python闭包修改全局变量_python闭包探究一二

    复习 python引用变量的顺序: 当前作用域局部变量 -> 外层作用域变量 -> 当前模块中的全局变量 -> python内置变量 global:声明一个全局变量 nonlocal ...

  9. python闭包修改全局变量_Python 闭包

    外函数和内函数 如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数. 闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的 ...

最新文章

  1. 信息学奥赛C++语言:由大到小输出1~100的整数
  2. SQL学习——小结练习(1)
  3. 开始学习python标准库---os
  4. [转][Python小记] 通俗的理解闭包 闭包能帮我们做什么?
  5. 如何把UCF101数据集分成训练集和测试集
  6. win系统CH341驱动安装方法
  7. 京东物流系统架构演进中的最佳实践
  8. 使用ArcGIS软件对 .jpg 图片添加经纬网及地理配准失败的原因
  9. 信息流短视频时长多目标优化
  10. 新浪微博登录html代码,新浪微博登录仿DiscuzX1.5论坛QQ登录样式 - YangJunwei
  11. Exp4 恶意代码分析 20154328 常城
  12. python中axis=0和axis=1的理解
  13. ANSVC无功补偿装置在南京某高等院校中的应用
  14. 江苏省数学建模省赛答辩准备
  15. java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String,toArray向下转型失败
  16. 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
  17. Sublime Text 3 简体中文汉化包使用方法
  18. linux vt码的学习和使用
  19. Oracle打补丁步骤
  20. 柔性电子 热电效应: 塞贝克(seebeck )效应 帕尔贴(Peltier)效应和 汤姆逊(Thomson )效应

热门文章

  1. libpcap文件格式分析
  2. Spring 国际化中文乱码的解决方法
  3. 此远程计算机不支持remoteapp,部署RemoteApp实现应用程序的远程调用
  4. 物业合同以外服务的收费,谁说了算?
  5. 将十个数字从大到小排序
  6. 本地文件怎么移动到云服务器,本地文件怎么移动到云服务器
  7. MIT 线性代数 1-5讲总结:消元、主元、初等矩阵、不可逆矩阵的证明、高斯-约尔当求逆、上下三角矩阵、置换矩阵、转置、向量空间与子空间
  8. XP系统优化简单实用技法收藏
  9. 关于使用SMSManager发送短信字数限制问题及短信编码格式
  10. BUUCTF:[NCTF2019]phar matches everything