什么是闭包?

多层函数嵌套,(函数里面还有定义函数,一般是两个),往往内层函数会用到外层函数的变量,把内层函数以及外部函数的变量当成一个特殊的对象,这就是闭包。闭包比面向对象更纯净、更轻量,既有数据又有执行数据的代码;比普通函数功能更强大,不仅有代码还有数据

# 定义一个函数
def test(number):# 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包def test_in(number_in):print("in test_in 函数, number_in is %d" % number_in)return number+number_in# 其实这里返回的就是闭包的结果return test_in# 给test函数赋值,这个20就是给参数number
ret = test(20) # test()的返回值为内层函数,所有现在ret指向内层函数# 注意这里的100其实给参数number_in
print(ret(100))  # 给内层函数传值#注 意这里的200其实给参数number_in
print(ret(200))  # 给内层函数传值

运行结果:

in test_in 函数, number_in is 100
120in test_in 函数, number_in is 200
220
此时内层函数用到了外层函数的变量,也可以对其进项修改(不可变类型时)

关键字: nonlocal

nb = 0  # 定义一个全局变量def test1(num=0):  # 默认参数def test2():global nb  # 在内层函数中修改全局变量时依然使用global声明nonlocal num  # 在内城函数中修改外层函数的变量时使用新的关键字:nomlocalnb += 2num += 1return  nb,numreturn test2t1 = test1() # t1指向内层函数
print(t1())
# 运行结果为 (2, 1)

匿名函数、普通函数、闭包、面向对象的区别?

1). 匿名函数能够完成基本的简单功能,传递是这个函数的引用 只有功能。

2). 普通函数能够完成较为复杂的功能,传递是这个函数的引用 只有功能。

3). 闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,占用资源比较小

4). 对象能够完成最为复杂的功能,传递是数据+功能,但占用大量空间,浪费资源。

python中 [ 闭包 ] 小结相关推荐

  1. python闭包主要解决什么问题_关于python中闭包的总结

    1.闭包的概念 首先,仍然从闭包是什么讲起,来看下维基百科上给出的解释: 一脸懵? 通过PYTHON语言解释一下,闭包,简而言之,给你一个函数,调用该函数后,它并没有返回一个值,而是返回了另一个函数, ...

  2. 谈谈自己的理解:python中闭包,闭包的实质

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~ 请大家跟我理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内 ...

  3. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?

    无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun(): temp = [lambda x : i*x for i in range(4)] return temp ...

  4. python装饰器 稀里糊涂_谈谈自己的理解:python中闭包,闭包的实质

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~ 请大家跟我理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内 ...

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

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

  6. python中闭包详解

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

  7. python装饰器与闭包_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。...

    转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...

  8. python闭包和装饰器的区别_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。(转)...

    呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...

  9. python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)

    一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...

最新文章

  1. 新冠疫情下,毕业照怎么拍?10行Python代码搞定
  2. MOCTF-Web-PHP黑魔法
  3. docker 安装 与 卸载 centos
  4. [VBS]转换二进制数据为字符串常用办法
  5. MySQL length函数使用详解
  6. 望洋兴叹的意思是什么?望洋兴叹造句
  7. java代码建立删除vpn_Java类集综合练习——信息管理(增、删、改、查)
  8. bilibili怎么用用户名登录_bilibili账号安全中心 | 手游网游页游攻略大全
  9. PIE SDK 坐标系创建、定义、对比
  10. linux中查找文件并合并文件
  11. 三大抽样分布——卡方分布、t分布、F分布
  12. 税控盘是服务器系统,税控盘系统参数设置服务器设置
  13. 字节跳动2020春招笔试 - 研发岗位(Java、C++、大数据)
  14. 服务器ping值不稳定,服务器网络ping值过高的原因
  15. matlab 剪毛刺,MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
  16. Spark on Hive Hive on Spark傻傻分不清?
  17. 小白一键重装有linux,linux小白说说用linux的感受
  18. 高精度地图-使用ArcMap标注高精度地图
  19. J-Hi线下交流--实况
  20. 出战卡不足_特种部队TCG的不足之处和改进方案

热门文章

  1. Truncated incorrect DOUBLE value: 'xxx'的解决方法
  2. Java Virtual Machine报错:A Java Exception has occured
  3. 关于docker部署javaweb应用的问题
  4. 让想法更加结构化!思维导图工具MindManager
  5. Java thread(4)
  6. mysql 日期对比,varchar类型装换为datetime类型
  7. 开源搜索引擎solr4.0+tomcat7实现中文分词
  8. Wordpress表结构详细说明
  9. 超级网管员系列图书介绍
  10. 现身说法“好奇心害死人啊”