Python 闭包的相关知识

用案例解释闭包:整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。

​ 比如大众推出了一款新车:小白轿车。

​ 第一天价格为:100000元,平均收盘价:100000元

​ 第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元

​ 第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元

​ …………

l1 = []     # 全局变量,数据不安全,容易被误操作改变。
li = []     # 相似的变量
def make_averager(new_value):
    l1.append(new_value)
    total = sum(l1)
    return total / len(l1)
print(make_averager(100000))    # 100000.0
print(make_averager(110000))    # 105000.0
l1.append(34556)    # 本来要对li进行操作,但是不小心追加错了,造成最终结果出错。
print(make_averager(120000))    # 83364.0
def make_averager():
    l1 = []                         # 将l1放置在函数内,变成了局部变量,
    def averager(new_value):        # l1在这里被嵌套函数averager调用了,
        l1.append(new_value)        # 列表l1和函数averager之间产生了一个绑定关系,
        return sum(l1) / len(l1)
    print(locals())
    return averager
avg = make_averager()               # 接下来嵌套函数averager被赋值给了avg变量,
print(avg(100000))                  # 所以l1虽然在全局变量列表中已经消失,不可调用,但却真实存在,
l1.append(54464)                  # 这行代码调用将出错
print(avg(110000))                  # 只有通过avg变量调用才能对l1进行改变,
print(avg(90000))                   # 这个现象就是闭包。
print(globals())

Original: https://www.cnblogs.com/amwkvi/p/13747874.html
Author: amwkvi
Title: Python 闭包的相关知识

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643505/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 命令行传参是否只能针对main方法

    先上结论 命令行传参只能针对main方法而言,而且格式严格 这里在原有主类 test基础上创建了另一个类,名字为 testCMD,但里面创建的方法并不是main方法,在cmd内编译…

    技术杂谈 2023年7月25日
    055
  • 【转】Controller以及View的几种创建方式

    Xib是storyboard的前身,使用storyboard的好处是可以建立起界面跳转的关系,看起来更加直观。 可能报错的地方: 产生原因:在xib文件中没有进行任何操作。解决方法…

    技术杂谈 2023年6月1日
    096
  • 当类的泛型相关时,如何在两个泛型类之间创建类似子类型的关系

    哈喽大家好,我是阿Q! 事情是这个样子的…… 对话中的截图如下: 看了阿Q的解释,你是否也和”马小跳”一样存在疑问呢?请往👇看 我们…

    技术杂谈 2023年7月11日
    072
  • 使用IntelliJ IDEA查看类的继承关系图形

    1、查看图形形式的继承链 在你想查看的类的标签页内,点击右键,选择 Diagrams,其中有 show 和 show … Popup,只是前者新建在标签页内,后者以浮窗…

    技术杂谈 2023年5月31日
    0111
  • html大文件传输功能

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 通过form表单向后端发送请求 改进后的代码不需要…

    技术杂谈 2023年5月30日
    0103
  • CentOS 7.6 Mysql、RabbitMQ等软件rpm安装方式及配置

    以下都基于centos 7.6 1 防火墙相关 开启防火墙 systemctl start firewalld 开启指定端口 含义 –zone 作用域 -add-port=637…

    技术杂谈 2023年7月24日
    095
  • 全新升级的AOP框架Dora.Interception[2]: 基于约定的拦截器定义方式

    Dora.Interception(github地址,觉得不错不妨给一颗星)有别于其他AOP框架的最大的一个特点就是采用针对”约定”的拦截器定义方式。如果我…

    技术杂谈 2023年5月31日
    0117
  • Xshell、winscp连不上Linux虚拟机

    1.环境本地机器WIN7环境,使用VMware Workstation Pro安装的CentOS7,系统镜像CentOS-6.1-x86_64-netinstall.iso 2.问…

    技术杂谈 2023年7月25日
    066
  • 如何在MFC中创建非矩形button

    一般情况下,我们创建的按钮都是矩形的,但有时为了满足特殊的需求,我们要在对话框中创建一个非矩形的按钮,比如,圆形,椭圆等。 要实现一个非矩形的按钮,这就涉及到了自绘控件。自绘控件的…

    技术杂谈 2023年6月1日
    095
  • 最优化局部极小点的条件(二)

    回忆一下关于 元实值函数的 的求导问题,函数 的一阶导数 为 函数的梯度正好是导数的转置,即;函数的二阶导数,也称为hessian矩阵,可表示为: 对于向量, 和约束集中的某个点 …

    技术杂谈 2023年5月31日
    084
  • 什么是 inode ?

    一般来说,面试不会问 inode 。但是 inode 是一个重要概念,是理解 Unix/Linux 文件系统和硬盘储存的基础。 理解inode,要从文件储存说起。 文件储存在硬盘上…

    技术杂谈 2023年5月31日
    0103
  • NO.1通讯录管理系统+源代码(C++)

    功能描述:显示简单的菜单,供用户选择操作 实现步骤:直接cout输出 功能描述:根据用户不同的操作代码选择,进入不同的功能,我们使用switch分支结构进行搭建 实现步骤:用whi…

    技术杂谈 2023年7月24日
    071
  • DevOps工程师技能

    DevOps工程师必须持有计算机科学、工程或其他相关领域的学位。2年以上工作经验。这包括开发人员、系统管理员或devops驱动的团队成员的工作。这是一个重要的需求,同时也是对所有I…

    技术杂谈 2023年5月31日
    0104
  • pdf文件 a4转到手机

    pdf文件 a4转到手机 pdf文件 a4转到手机 pdf文件 a4转到手机 人工智能演示 ……. 计算….. Original: https:…

    技术杂谈 2023年5月31日
    088
  • MCU软件最佳实践——独立按键

    短小精悍,适用于有rtos和无rtos场合的按键驱动程序 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课。笔者翻阅了…

    技术杂谈 2023年7月11日
    0102
  • Java多线程

    join()方法使用:【已经开了3个线程ABC,要求线程A在线程B的前面执行,线程B在线程C的前面执行】 https://blog.csdn.net/zds448588952/ar…

    技术杂谈 2023年7月24日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球