python闭包

  • 什么样的函数是 闭包函数 ?

    满足以下条件:

    闭:外层函数嵌套了一个内层函数。

    包:内层函数调用外层函数命名空间内的名字。

    举例如下:

    def out_func(): # 外层函数
    data = 'soria'
    def in_func(): # 内层函数
    print(data) # 内层函数调用外层函数命名空间内的变量
    return in_func
    box = out_func()
    box()

    执行顺序是:

    1.默认顺序从上往下执行

    2.遇到"="优先执行右边的out_fun()

    3.执行函数out_func(),在其命名空间内,定义data,定义函数in_func(),return返回in_func

    4.box接受in_func这个函数对象

    5.box()相当于in_func()

    6.执行in_func(),但是发现in_func()的命名空间没有data

    7.去外层函数out_func的命名空间取data

    8.输出'soria'

  • 闭包函数 使用形参 给内层函数 传参

    def out_func(data): # 外层函数
    def in_func(): # 内层函数
    print(data)
    return in_func
    box = out_func('soria') # 形参data与'soria'临时绑定
    box()
    box = out_func('jason') # 形参data与'jason'临时绑定
    box()

    在传入'数据'这个值时,相当于将形参与"数据"这个值临时绑定。

    相当于在out_func函数体内加入了一行代码:data = 'soria'

    当内层函数in_func找不到data这个值时,依然会去外层函数寻找data,

    此时就找到了形参绑定的值:'soria'。

最新文章

  1. [原创]MySQL innodb_rollback_on_timeout参数对锁的影响
  2. WPF之MVVM(Step2)——自己实现DelegateCommand:ICommand
  3. linux笔记:shell编程-正则表达式
  4. HTML5新特性之WebRTC
  5. slice的用法与用量
  6. 小公司生存,一般活过第一年,就能撑3年(读书笔记:成败关键,关键是你是否拥有现金流客户)good
  7. Codeblock解决注释乱码问题及在ubuntu中程序运行时乱码问题。
  8. Asp.net Core 跨域配置
  9. Angular 4+ Http
  10. windows环境隐藏命令行窗口运行Flask项目
  11. Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)
  12. laravel框架容器管理
  13. Python3练习题系列(05)——设计和调试规则
  14. WebStorm for Mac(Web 前端开发工具)破解版安装
  15. eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load
  16. Codeforces Round #544 (Div. 3) dp + 双指针
  17. 搭建LDAP服务器
  18. Xcode修改新建项目注释模板(作者和公司名等)
  19. UITabBar设置详解
  20. 设置Linux-Centos6.5字符集

热门文章

  1. Kibana管理
  2. 【前端必会】使用indexedDB,降低环境搭建成本
  3. vue通过插件实现PDF生成以及下载
  4. 洛谷P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G (tarjan缩点)
  5. 编程架构演化史:远古时代,从打孔卡(Punched Card)开始
  6. 利用Hutool-(Java工具类)实现验证码校验
  7. 【算法】浅学 LCA
  8. web前端一览&jQuery
  9. Vue学习之--------计算属性(2022/7/9)
  10. 8.-Django应用及分布式路由