python学习笔记29-闭包基本概念

1 什么是闭包

创建闭包的方法:

  1. 定义一个外函数outer();
  2. outer()中定义一个临时变量;
  3. outer()中定义一个内函数inner();
  4. inner()中使用了outer中的临时变量;
  5. outer()的返回值是对inner的引用;
    这样就创建了一个闭包, 闭包的特性见第3节.

2 闭包实例

def outer():               #1. 定义一个外函数outer()
    _list_tmp = list()     #2. outer()中定义一个临时变量
    def inner(s_new_ele):  #3. outer()中定义一个内函数inner();
        _list_tmp.append(s_new_ele) #4. inner()中使用了outer中的临时变量;
        print(_list_tmp)
        return _list_tmp
    return inner           #5. outer()的返回值是对inner的引用;

if __name__ == '__main__':
    inner_0 = outer()  # inner_0中绑定了一个临时变量_list_tmp. outer()返回的是对inner的引用
    inner_0('a')       # 返回['a']
    inner_0('b')       # 返回['a', 'b']

    inner_1 = outer()  # inner_1中绑定了另一个临时变量_list_tmp, 与inner_0中的相互独立
    inner_1('x')       # 返回['x']
    inner_1('y')       # 返回['x', 'y']

    inner_0('c')       # 返回['a', 'b', 'c']
    inner_1('z')       # 返回['x', 'y', 'z']

3 闭包的特点

  1. 从外部读取函数内部的变量.
  2. 将创建的变量始终保持在内存中.
  3. 封装对象的私有属性和私有方法.

一般情况下, 一个函数运行结束时, 函数内部的临时变量就销毁了.
但闭包比较特殊, outer()运行结束后, 由于它的临时变量用在inner()中, 所以这个临时变量就绑定给inner()了.
并且,
一次调用outer()函数返回的一个inner中的临时变量是相同的.
多次调用outer()函数返回的多个inner中的临时变量是相互独立的.

4 闭包的应用

  1. 装饰器.
  2. 面向对象, 由于临时变量在inner之间是相互独立的, 与class有相同的特点, 所以可以使用闭包来实现class(python的class不是用闭包实现的).
  3. 实现单例模式.
posted @   编程驴子  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· Tinyfox 发生重大改版
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
· 近期最值得关注的AI技术报告与Agent综述!
点击右上角即可分享
微信分享提示