Python编程 闭包

news2024/11/15 17:27:14

  • 作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 

  •  座右铭:低头赶路,敬事如仪

  • 个人主页:b网络豆的主页​​​​​​

目录

 前言

一.闭包

1.什么是闭包

前景引入:

2.闭包的定义需要满足以下三个条件:

 总结:


 前言

本章将会讲解Python编程函数的闭包。


一.闭包

1.什么是闭包

当我们在外部函数中定义了一个内部函数,并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包。

前景引入:

def test_one():
    print("---1---")

#test_one()    #函数的调用
t_o = test_one()
print(id(test_one()))    #140726006127832
print(id(t_o))          #t_o变量指向了test_one函数的调用   140726006127832
# t_o()   报错

2.闭包的定义需要满足以下三个条件:

  1. 在一个外函数中定义了一个内函数
  2. 内函数里运用了外函数的临时变量
  3. 并且外函数的返回值是内函数的引用
def test(number):       #number 形参 临时变量
    print("--1--")

    def test_in(number_in):
        print(number_in)
        print("--2--")
        return number_in + number

    print("--3--")
    return test_in

#执行完毕时 结果--1-- --3--  并且函数里面的变量会被释放(number)
res = test(20)     #res = test_in
res1 = res(25)            #test in()
print(res1)        #45 说明在外层函数执行完毕时,number并没有被释放,而是继续给内层函数使用。

 从上自下执行,碰到test(20)执行test里面内容输出--1-- 再向下执行输出--3--,返回test_in检测到了还有内层函数,将test_in返回时将临时变量与内层函数进行了绑定,绑定后继续向下执行返回到函数调用处res ,res相当于test_in ,我们想调用内层函数使用res进行调用执行res1=res(25) 输出了25 输出了--2--,使用到了number,从而证明产生了闭包。


 总结:

  • 闭包它是一种现象
  • 一般情况下,外函数执行完毕时,临时变量会被释放。
  • 但此时,外函数发现自己的临时变量会在将来被使用,
  • 所以外函数结束的时候,在返回内函数引用的同时,将外函数的临时变量与内函数进行绑定。
  • 这也是为什么当外函数结束,但内函数仍然可以使用外函数临时变量的原因。

 创作不易,求关注,点赞,收藏,谢谢~  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis序列化、乱码问题

Redis序列化问题 每当初学者学习Redis,并且使用SpringBoot整合Redis的时候,总会看到别人使用这种东西—配置类,然后自己又看不懂,oh,fuck!! 这是为什么,为什么要有这个配置类&…

Pytorch优化器全总结(四)常用优化器性能对比 含代码

目录 写在前面 一、优化器介绍 1.SGDMomentum 2.Adagrad 3.Adadelta 4.RMSprop 5.Adam 6.Adamax 7.AdaW 8.L-BFGS 二、优化器对比 优化器系列文章列表 Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad Pytorch优化器全总结(二…

设计模式学习(七):Factory Method工厂模式

目录 一、什么是Factory Method模式 二、Factory Method示例代码 2.1 类之间的关系 2.2 Product类 2.3 Factory类 2.4 IDCard类 2.5 IDCardFactory类 2.6 用于测试的Main类 2.7 运行结果 三、拓展思路的要点 3.1 框架与具体加工 3.2 使用模式与开发人员之间的沟通 …

(12)go-micro微服务JWT跨域认证

文章目录一 JWT介绍二 JWT优缺点三 JWT使用1. 导包和数据定义2.生成JWT3.解析JWT4.完整代码四 最后一 JWT介绍 JWT 英文名是 Json Web Token ,是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,经常用在跨域身份验证。 JWT 以 JS…

拐点检测常用算法总结

目录概览问题定义符号定义研究方法损失函数概览 问题定义 拐点检测名为 change point detection,对于一条不平缓的时间序列曲线,认为存在一些时间点 (t1,t2,...,tk)( t_1 , t_2 , . . . , t_k )(t1​,t2​,...,tk​) ,使得曲线在这些点对应…

Java SPI的介绍、JDBC中SPI的应用、自己实现一个SPI应用

目录1. Java SPI介绍2. Java SPI的运行流程3. Java SPI在JDBC中的应用4. Java SPI的三大规范要素5. 自己实现一个SPI应用5.1 Service接口5.2 运营商1的Service Provider5.3 运营商2的Service Provider5.3 手机使用网络1. Java SPI介绍 SPI(Service Provider Interface)是一种基…

在别墅大宅中打造全屋智能,总共需要几步?

关于智能家居,很多读者可能会想起一些不那么愉快的回忆:2014年左右的智能家居浪潮,涌现出了众多带蓝牙互联功能的家电产品,但数据无法互联互通、单品体验升级有限,加上一些企业竞争失败产品不再更新,留给消…

EXCEL工具介绍

目录1. 锁定功能2. 固定1. 锁定功能 锁定:F4 公式引用单元格,有“相对引用”与“绝对引用” 美元符号“ $ ”在excel公式中的作用是在“绝对引用”时,锁定行号或列标(单元格地址由列标行号组成,如A1,A为列…

国产软件不惧微软,WPS力扛大旗,新型办公软件争相助力

金山作为程序员的“黄埔军校”,输入了一批批互联网大佬,小米的雷军、哔哩哔哩的陈睿、蓝港互动的王峰等都师出金山。WPS作为金山拳头作品,有着“国民软件”美誉,功能强大,使用体验一点不输微软word,然而有一…

打工人必学的法律知识(三)——《中华人民共和国劳动争议调解仲裁法》

PS : 对与日常工作比较紧密的部分做摘录 中华人民共和国劳动争议调解仲裁法http://www.npc.gov.cn/npc/c198/200712/756d4eceb95e420a87c97545a58d931c.shtml 目录 一、调解 二、仲裁 三、申请和受理 四、开庭和裁决 五、附则 第六条 发生劳动争议&#xff0…

python镜像设置

winr 输入 %USERPROFILE% 新建pip目录,目录内新建pip.ini 输入: [global] index-urlhttp://mirrors.aliyun.com/pypi/simple/ trusted-hostmirrors.aliyun.com

计算机网络概括

1 前言计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。简单来说,…

STM32模拟SPI总线读写RFID模块RC522

STM32模拟SPI总线读写RFID模块RC522 RC522是一款NXP 公司的支持ISO14443A协议的高频(13.56MHz)RFID射频芯片。RFID有ID和IC两种卡应用类型,RC522属于IC卡的应用类型。NFC则属于增强的IC卡类型,支持双向通信和更多类型的协议。 I…

es官网翻译之Exploring Your Cluster

Exploring Your Cluster 探索你的集群 The rest api rest 风格的 api Now that we have our node (and cluster) up and running, the next step is to understand how to 现在 我们已经将我们自己的节点(和集群) 启动并运行着, 下一个步骤是知道如何 communicate with it…

Java面试题每日10问(12)

1. What is String Pool? String pool is the space reserved in the heap memory that can be used to store the strings.The main advantage of using the String pool is whenever we create a string literal; the JVM checks the “string constant pool” first.If th…

速度为单GPU1.6倍,kaggle双GPU(ddp模式)加速pytorch攻略

accelerate 是huggingface开源的一个方便将pytorch模型迁移到 GPU/multi-GPUs/TPU/fp16 模式下训练的小巧工具。和标准的 pytorch 方法相比,使用accelerate 进行多GPU DDP模式/TPU/fp16 训练你的模型变得非常简单(只需要在标准的pytorch训练代码中改动不几行代码就可…

linux基功系列之man帮助命令实战

文章目录前言一、man命令介绍二、常用参数2.1 语法2.2 常用参数2.3 man页面的操作命令man命令使用案例1. 直接查看手册2. -aw 参数找到可以被查询的章节2.3 一次性查阅所有章节2.4 搜索手册页2.5 -L 设置查询语言总结前言 linux系统中的命令数量有上千的,即使是常用…

前端——周总结系列二

1 JS数组排序sort()方法 不传参数排序,默认根据Unicode排序 附录 传参数,使用比较函数,自己定义比较规则 简单数组排序 // 升序 function ascSort(a, b) {return a - b; } // 降序 function ascSort(a, b) {return b - a; }数组对象排序…

算法leetcode|31. 下一个排列(rust重拳出击)

文章目录31. 下一个排列:样例 1:样例 2:样例 3:提示:分析:题解:rustgoccpythonjava31. 下一个排列: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0…

ROS2机器人编程简述humble-第二章-First Steps with ROS2 .1

ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2学习笔记流水账-推荐阅读原书。第二章主要就是一些ROS的基本概念,其实ROS1和ROS2的基本概念很多都是类似的。ROS2机器人个人教程博客汇总(2021共6套)如何更…