闭包

闭包:python中的闭包从表现形式上定义(解释)为:

  如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

先看一个函数:

 def func1()
def func2()
a = 1
return a
func2()

因为函数内部又有嵌套函数,
嵌套函数定义:定义在内部的函数无法在全局被调用
所以产生了闭包问题
什么问题?
就是func1 拿不到func2 的变量a
怎么才能拿到呢?
我们知道,函数是第一类对象(第一类对象说白了你可以把函数当成变量使用),你可以把func1中的变量(func2)通过return返回

 def func1()
def func2()
a = 1
return a
return func2 x = func1() #这样就拿到了func2 并赋值给了变量x
x() # x()等同于 func2() 看明白了吧 就得到了以个返回值a 这样就拿到func2 的变量a了 而如果:
def func1(para1)
para1
def func2()
a = 1
return para1 + a
return func2 func1(5) #如果把5传给func1 就会把def func2 这个函数打包,
#注意:
def func2()
a = 1
return 1 + a
func1(5)() #等同于func2()
#就变相调用函数func2() 得到返回值 6
print(func1(5)()) # 6 #如果func1(8), 那么func2打包后:
def func2()
a = 1
return 8 + a
#每次调用func1,就会返回(打包)一个新的闭包实例
所以:
闭包 = 函数 + 引用环境

  

最新文章

  1. axis2+struts拦截地址冲突问题
  2. insmod模块的几种常见错误
  3. web api 初体验之 GET和POST传参
  4. Event&Condition pyton
  5. uva 699 the falling leaves——yhx
  6. 一个快速查看API的汇编和机器码的工具.发布源码
  7. redis学习(一)
  8. SFTPTool 和 FTPTooL.java
  9. Codeforces Round #221 (Div. 2) Lever I.O.U.
  10. PHP CI框架下,如果配置NGINX(根目录和子目录两种模式)
  11. Swift 3.0项目迁移的一些记录
  12. ubuntu中文乱码解决
  13. django(七)之数据库表的单表-增删改查QuerySet,双下划线
  14. springboot(十四):springboot整合mybatis
  15. IDEA 快捷将创建main函数
  16. 【C++ Primer 第六章】 1. 定义模板
  17. hdu 1983(BFS+DFS) 怪盗Kid
  18. AOP的异常通知
  19. 02 Django配置信息
  20. SSM三层模型之间的参数传递

热门文章

  1. Python behave in BDD
  2. knockout Observable Array(监控数组)
  3. 深入Docker 存储驱动 (转)
  4. 在Oracle用SQL处理以 System.currentTimeMillis
  5. (转)编码剖析Spring依赖注入的原理
  6. HNOI2006 花仙子的魔法
  7. django--基础操作
  8. Jvm:性能调优监控工具
  9. day22 02 面向对象的交互
  10. java多线程之ForkJoinPool