Python闭包探索,释放函数记忆的秘术

引言

hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。

希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可以留言或者私信交流。

如果你想看什么主题的文章,欢迎留言交流,关注公号,领取编程资料。

闭包的概念

闭包说白了就是函数中嵌套函数,是定义在一个函数内部的另一个函数,内部函数可以访问创建时所在作用域的变量,即使外部函数已经执行完毕。闭包使得这些变量的值被保持在内存中,即使外部函数已经退出。

创建闭包

在Python中,闭包通常通过嵌套函数来创建。以下是一个简单的闭包示例:

def outer_function(x):def inner_function(y):return x + yreturn inner_function# 创建闭包
closure = outer_function(10)
print(closure(5))  # 输出: 15

在这个例子中,outer_function 返回了 inner_function 函数,inner_function 可以访问 outer_function 的参数 x

闭包的应用

一个技术诞生肯定不是为了装逼,肯定是有其存在的意义。那么闭包在Python中的肯定也是有其应用的场景。

数据封装和隐私

闭包可以用来封装数据,实现类似于私有变量的功能。

def create_counter():count = 0def counter():nonlocal countcount += 1return countreturn countermy_counter = create_counter()
print(my_counter())  # 输出: 1
print(my_counter())  # 输出: 2

柯里化(Currying)

闭包可以用于实现函数的柯里化,即把接受多个参数的函数转换成接受单一参数(或不接受参数)的函数,并且返回接受余下参数的新函数。

def add(x):def inner_add(y):return x + yreturn inner_addadd_five = add(5)
print(add_five(3))  # 输出: 8

延迟计算

闭包可以用于延迟计算,即只在需要时才执行计算。

def lazy_computation():x = Nonedef compute():nonlocal xif x is None:x = 5return xreturn computecompute_lazy = lazy_computation()
print(compute_lazy())  # 第一次调用时计算
print(compute_lazy())  # 后续调用使用缓存的值

装饰器

Python中的装饰器本质上也是闭包的一种应用。

def decorator(func):def wrapper():print("Something before")func()print("Something after")return wrapper@decorator
def my_function():print("Function executed")my_function()

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

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

相关文章

docker搭建gitlab及默认密码修改及配置修改

推荐官方文档 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式,官方文档后面有docker-compose、swarm、k8s的部署文档 版本说明 1:可以部署gitlab-ce社区版和gitlab-ee企业版,然后,鉴于是个人…

Mysql总结2

Mysql慢优化 在mysql中,long_query_time的值为10,当sql语句执行的时间超过这个数值时,则会被记录到慢查询日志中。 Mysql语句查询流程 1、客户端发送sql语句到服务端; 2、服务端查看是否打开了缓存,若缓存打开&…

AIGC绘画设计基础-建筑设计应用

一、AI及AIGC 对于AI大家都不陌生,但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身,而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…

近邻算法详解

近邻算法(Nearest Neighbor Algorithm),也称为K-近邻算法(K-Nearest Neighbors,KNN),是一种基本的分类和回归方法。它的工作原理非常直观:通过测量不同特征点之间的距离来进行预测。…

使用CommandLine库创建.NET命令行应用

CommandLine是一个.NET库,用于创建命令行应用程序。它提供了一种简单的方法来解析命令行参数,并且可以帮助您构建一个功能强大的命令行界面。在本文中,我们将介绍如何使用CommandLine库创建.NET命令行应用程序。 1. 背景 在.NET开发中&#…

SpringFramework实战指南

二、SpringFramework实战指南 目录 一、技术体系结构 1.1 总体技术体系1.2 框架概念和理解 二、SpringFramework介绍 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 三、Spring IoC容器和核心概念 3.1 组件和组件管理概念3…

起底震网病毒的来龙去脉

2010年,震网病毒被发现,引起世界哗然,在后续的10年间,陆陆续续有更多关于该病毒的背景和细节曝光。今年,《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息,基于这些信息,我们重新梳理…

优于InstantID!中山大学提出ConsistentID:可以仅使用单个图像根据文本提示生成不同的个性化ID图像

给定一些输入ID的图像,ConsistentID可以仅使用单个图像根据文本提示生成不同的个性化ID图像。效果看起来也是非常不错。 相关链接 Code:https://github.com/JackAILab/ConsistentID Paper:https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)

1,绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院,经过我们前期的调查,院方大部分工作采用手工操作方式,会带来工作效率过低,运营成本过大的问题。 院方可用合理的较少投入取得更好…

Python数据可视化(七)

绘制 3D 图形 到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

三、Gazebo中实现机器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\导航 vim .bashrc \先采用Nanocar尝试导航 关闭终端:roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重启终端: cd catkin_ws source ./devel/setu…

护网经验面试题目原版

文章目录 一、护网项目经验1.项目经验**Hvv的分组和流程**有没有遇到过有意思的逻辑漏洞?有没有自己开发过武器/工具?有做过代码审计吗?有0day吗有cve/cnvd吗?有src排名吗?有没有写过技战法有钓鱼经历吗?具…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树) 接下来是名词解释: 权&a…

VC++位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码

VC位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、逻辑驱动器插拔产生的掩码 dbv.dbcv_unitmask 进行分析的…

如何使用Suno:免费的AI歌曲生成器

文章目录 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;选择Suno AI的理由&#xff1a;核心优势易于操作多样化创作灵活的定价策略版权保障技术突破 如何使用Suno AI创作歌曲&#xff1f;第1步&#xff1a;注册Suno AI账户第2步&#xff1a;输入提示词创建第 3 步&a…

作业-day-240522

思维导图 使用IO多路复用实现并发 select实现TCP服务器端 #include <myhead.h>#define SER_IP "192.168.125.112" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket er…

脆皮之“字符函数与字符串函数”宝典

hello&#xff0c;大家好呀&#xff0c;感觉我之前有偷偷摸鱼了&#xff0c;今天又开始学习啦。加油&#xff01;&#xff01;&#xff01; 文章目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现3.1 strlen 的使用3.1 strlen 的模拟1.计算器方法2.指针-指针的方…

Python的shutil模块探索,文件操作的瑞士军刀

hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#xff0c;可以留…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…