【Python】闭包
闭包(Closure)是指一个函数记住了并可以访问它的词法作用域(lexical scope),即使这个函数在词法作用域之外执行。
闭包其实就是延伸了作用域的函数,包括被延伸函数主体中引用的非全局变量和局部变量。这些变量必须来自包含被延伸函数的外部函数的局部作用域。函数是不是匿名的没有关系,关键是它能访问主体之外定义的非全局变量。
闭包常用于创建私有变量、函数工厂等场景。装饰器本质上也是闭包的一种应用。
闭包由以下两部分组成:
一个嵌套的函数(内部函数)。
这个嵌套函数引用了其外部作用域中的变量,并且在其外部作用域不再存在的情况下依然能够访问这些变量。
series 是 自由变量 (free variable)。自由变量指未在局部作用域中绑定的变量。
def make_averager(): #外部函数series = [] #变量def averager(new_value): #内部函数series.append(new_value) #内部函数引用了变量seriestotal = sum(series) return total / len(series) return averager #外部函数返回内部函数,此时averager就成为了一个闭包,因为它技术了并可以访问外部函数make_averager
# 创建闭包
avg = make_averager()
# 调用闭包,实际上是在调用内部函数averager,此时averager依然可以访问外部函数的值
a=avg(10)
print(a)
b=avg(19)
print(b)
私有变量
闭包可以用来模拟私有变量,因为外部无法直接访问内部函数的变量。
nonlocal关键字的作用是把变量标记为自由变量,即便在函数中为变量赋予了新值。如果为 nonlocal 声明的变量赋予新值,那么闭包中保存的绑定也会随之更新。
def make_counter():count = 0def counter():nonlocal countcount += 1return countreturn countercounter = make_counter()
print(counter()) # 输出: 1
print(counter()) # 输出: 2
#计算累计平均值,不保存所有历史
def make_averager(): count = 0 total = 0 def averager(new_value): nonlocal count, total count += 1 total += new_value return total / count return averageravg = make_averager()
a=avg(10)
print(a)
b=avg(80)
print(b)
函数工厂
闭包可以用来创建参数化的函数。
def make_multiplier(factor):def multiplier(number):return number * factorreturn multiplierdouble = make_multiplier(2)
triple = make_multiplier(3)print(double(5)) # 输出: 10
print(triple(5)) # 输出: 15
装饰器
def my_decorator(func):def wrapper(*args, **kwargs):print(f"Calling {func.__name__}")result = func(*args, **kwargs)print(f"{func.__name__} returned {result}")return resultreturn wrapper@my_decorator
def say_hello():return "Hello!"print(say_hello())
相关文章:
【Python】闭包
闭包(Closure)是指一个函数记住了并可以访问它的词法作用域(lexical scope),即使这个函数在词法作用域之外执行。 闭包其实就是延伸了作用域的函数,包括被延伸函数主体中引用的非全局变量和局部变量。这些…...
Python跨年烟花
目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...
QT------------其他工具软件和技术
实现思路 多语言界面程序设计: 使用 QTranslator 类为 QT 应用程序提供多语言支持。将不同语言的翻译文件(.qm 文件)添加到应用程序中,根据用户的语言设置动态加载相应的翻译文件。 QT 样式表(QSS)&#x…...
数据结构9.3 - 文件基础(C++)
目录 1 打开文件字符读写关闭文件 上图源自:https://blog.csdn.net/LG1259156776/article/details/47035583 1 打开文件 法 1法 2ofstream file(path);ofstream file;file.open(path); #include<bits/stdc.h> using namespace std;int main() {char path[]…...
javaEE-文件操作和IO-文件
目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备: 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式: 6.文件的分类 二、java中文件系统的操作 1.File类中的属性: 2.构造方…...
富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)
文章目录 一、IDE(集成开发环境)二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片,其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍,包括IDE(集成开…...
微服务-Eureka
Eureka的作用 使用RestTemplate完成远程调用需要手动的生命被调用者的ip和端口,从而能够发起http请求,但是如果有很多个实例也更加不能有效的处理,而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。…...
Elasticsearch: 高级搜索
一、match_all匹配所有文档 1、介绍: match_all查询是一个特殊的查询类型,它用于匹配索引中的所有文档,而不考虑任何特定的查询条件。 基本语法: GET /<your-index-name>/_search {"query": {"match_all…...
项目优化之策略模式
目录 策略模式基本概念 策略模式的应用场景 实际项目中具体应用 项目背景: 策略模式解决方案: 计费模块策略模式简要代码 策略模式基本概念 策略模式(Strategy Pattern) 是一种行为型设计模式,把算法的使用放到环境类中,而算…...
HTML——57. type和name属性
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…...
LabVIEW 实现自动对焦的开发
自动对焦(Autofocus, AF)技术是通过分析图像或传感器信号,动态调整焦点位置以实现清晰成像或高精度定位的过程。在LabVIEW中,可以通过集成信号采集、数据处理、控制算法和硬件接口模块,实现多种自动对焦方法࿰…...
Ruby 数据类型
Ruby 数据类型 Ruby,作为一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在Ruby中,数据类型是编程的核心组成部分,它们决定了变量可以存储的信息种类以及可以对这些信息执行的操作。Ruby是一种类型安全的…...
【MySQL】--- 表的CRUD
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: MySQL CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)。 🏠 插入C 🧷 基本…...
算法13、基础二分查找的应用(木根切割等)
🌰1、方程求根 晴问算法 1️⃣即求f(x) x^3 x^2 x - a 0的根,又因为要求精确到0.01,所以eps至少设置为1e-3或者更小; 2️⃣求导得3x^2 2x 1 2x^2 x^2 2x 1 2x^2 (x1)^2 > 0, 所以f(x)是单调递增函数&…...
hive on spark报错解决(基于hive-3.1.3和spark-2.3.0)
相关配置可参考:https://blog.csdn.net/weixin_46389691/article/details/134126254 原作者:月亮给我抄代码 他写的很详细 ERROR : Job failed with java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init&…...
CentOS — 目录管理
文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录,绿色可执行文件,红色压缩文件,浅蓝色链接文件,灰色其它文件, 点开头的是隐藏文件&…...
学AI编程的Prompt工程,豆包Marscode
学习链接:Datawhale-AI活动https://www.datawhale.cn/activity/116/23/95?rankingPage1 目录 一、如何使用 二、编写游戏 2.1 创意输入与代码生成 2.2 项目初始化与应用 2.3 创意优化与迭代 三、效果展示 一、如何使用 建议在在vscode上安装marscode插件&a…...
基于微信小程序的面部动作检测系统
引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作,并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性,特别是防止用户通过…...
Java网络套接字
在Java的开发中,有一个很重要!很重要!很重要!的东西,叫做网络套接字,它被广泛的用来二次开发服务,比如大数据中台的服务链路调用等。 它的实现原理是依靠三次握手来完成通信的建立,…...
mapbox基础,测面功能实现
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️Turf 框架二、🍀测面功能实现1. ☘️实现思路2. ☘️代码样例一、🍀…...
如何通过设置失效时间清除本地存储的数据
一、使用localStorage和时间戳(JavaScript) 1. 原理 localStorage是浏览器提供的一种在本地存储数据的方式,数据没有过期时间限制。但是可以通过自己记录时间戳来模拟数据过期的功能。在存储数据时,同时存储一个时间戳ÿ…...
【QT】找不到qwt_plot.h
系统环境: linux 20.04 qt 6.7.2 cmake 3.22 原因: Qwt没有正式的FindQwt.cmake,Qwt也没有提供QwtConfig.cmake。而且cmake不支持qmake的配置特性,也不支持读取mkspecs (.prf)文件。也就是说cmake构建的qt项目不可用qwt。 解决步…...
程序员如何培养技术领导力?
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
C# 设计模式(创建型模式):原型模式
C# 设计模式(创建型模式):原型模式 引言 在面向对象的设计中,创建型模式关注于对象创建的方式和复杂度。原型模式(Prototype Pattern)是其中一种创建型设计模式,它允许通过复制现有的实例来创…...
Python自学 - 函数初步(内置函数、模块函数、自定义函数)
1 Python自学 - 函数初步(内置函数、模块函数、自定义函数) 1.1 内置函数 几乎所有的编程都会提供一些内置函数,以便完成一些最基本的任务,Python提供了丰富的内置函数,熟悉内置函数可以给工作带来极大便利。 Python官方的内置函数介绍网…...
Mono里运行C#脚本21—mono_image_init_name_cache
前面分析了怎么样加载mscorlib.dll文件,然后把文件数据读取到内存。 接着下来,就会遇到加载整个C#的类型系统,比如System. Object,大体类型如下图所示: 在对CIL编译之前,需要把这些类型全部加载到内存里,以便快捷地访问它们。 mono_image_init_name_cache函数就是完成…...
MySQL中distinct和group by去重的区别
MySQL中distinct和group by去重的区别 在MySQL中,我们经常需要对查询结果进行去重,而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用,但它们之间还是存在一些差异的。接下来,我们将通过创建测…...
快速上手大模型的对话生成
本项目使用0.5B小模型,结构和大模型别无二致,以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…...
SpringCloud(一)--SpringCloud简介
一. 引言 在微服务架构日益盛行的今天,Spring Cloud凭借其简单易用、功能强大的特性,成为了众多开发者的首选。本文仅为学习所用,联系侵删。 二. SpringCloud概述 2.1 定义 Spring Cloud是一系列框架的有序集合,它巧妙地…...
常见的 Redis 面试题
1. Redis 是什么?它解决了哪些问题? Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它主要用于解耦应用程序的不同组件或服务,支持高吞吐量和低延迟的消息传递。解决了系统之间的同步调用导致的性能…...
面试准备备备备
职业技能 放到简历的黄金位置(HR刷选简历的重要参考) 基本准则:写在简历上的必须能聊,不然就别写 参考公式:职业技能 必要技术 其他技术 针对性的引导面试官(让他问一些你想让他问的) 寻找合…...
GeoIP + Nginx:实现网站的地域访问控制
1. 引言 在全球化的互联网环境中,地域访问控制已成为许多企业和个人网站管理的重要需求。通过限制特定地区的访问,网站管理员可以保护资源、提高安全性并优化用户体验。本文将介绍如何使用GeoIP和Nginx实现地域访问控制,并提供两种情况的详细…...
打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索
一、引言 当今时代,人工智能技术正以前所未有的速度蓬勃发展,深刻且广泛地渗透至各个领域,医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下,三甲医院作为医疗体系的核…...
算法题之将列表的数据复制到另一个列表中
方法一:for循环遍历list1中的每个元素append方法将元素逐个添加到list2列表中 list1 [‘q’,‘efe’,‘reb’,‘yhh’,2]list2 []for i in list1:list2.append(i) print(list2) 方法二:python列表自带copy方法,调用copy方法可以得到原列表的…...
Docker图形化界面工具Portainer最佳实践
前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言 本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。 安装Portainer 编写docker-compose文件 Portainer部署的步骤比较简单,我们还是以…...
在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件
在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…...
栈及栈的操作
栈及栈的操作 栈结构 栈是一种只能在一端进行插入或删除操作的数据结构。栈有两个基本的操作:入栈和出栈。 入栈:将一个新的元素放到栈顶。 出栈:从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的操作规则:LIFO(Last…...
YOLOv10-1.1部分代码阅读笔记-utils.py
utils.py ultralytics\nn\modules\utils.py 目录 utils.py 1.所需的库和模块 2.def _get_clones(module, n): 3.def bias_init_with_prob(prior_prob0.01): 4.def linear_init(module): 5.def inverse_sigmoid(x, eps1e-5): 6.def multi_scale_deformable_attn_py…...
JDK8源码分析Jdk动态代理底层原理
本文侧重分析JDK8中jdk动态代理的源码,若是想看JDK17源码分析可以看我的这一篇文章 JDK17源码分析Jdk动态代理底层原理-CSDN博客 两者之间有着略微的差别,JDK17在JDK8上改进了不少 目录 源码分析 过程 生成的代理类大致结构 本文侧重分析JDK8中jdk…...
springboot配置并使用RestTemplate
目录 一、RestTemplate配置 1、将RestTemplate初始化为Bean 2、使用HttpClient作为RestTemplate客户端 (1)引入HttpClient依赖 (2)修改RestTemplate配置类 3、设置拦截器 (1)新增拦截器类 …...
【MySQL关于数据库和表结构的增删查改】
数据库和表结构的基本语法 数据库命令关于字符集语法 表操作语法创建表查看表结构修改表修改表名增加字段同时修改字段名和字段数据类型仅修改字段数据类型删除字段 删除表 备份和恢复备份恢复 mysql -h 127.0.0.1 -P 3306 -u root -p mysql -u root -h 和 -p 默认 进入MySQL程…...
Linux 服务器启用 DNS 加密
DNS 加密的常用协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNSCrypt。以下是实现这些加密的步骤和工具建议: 1. 使用 DoH (DNS over HTTPS) 工具推荐: cloudflared(Cloudflare 提供的客户端)doh-client(…...
2025年,测试技能支棱起来。
你是否曾为提升自己的测试技能而烦恼?在这个日新月异的技术时代,2025年已经悄然而至,软件测试行业的需求和挑战也在不断变化。那么,如何在这个竞争激烈的环境中脱颖而出,成为一名更加优秀的测试工程师呢? …...
HTML5实现好看的二十四节气网页源码
HTML5实现好看的新年春节元旦网站源码 前言一、设计来源1.1 主界面1.2 关于我们界面1.3 春季节气界面1.4 夏季节气界面1.5 秋季节气界面1.6 冬季节气界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的二十四节气网页源码,春季节气…...
每天你好20250103(距离春节26天!!!)
亲爱的朋友们,大家早上好! 🌞 今天是 1 月 3 日,星期五,2025 年的第三天,同时也是第 1 周的第五天,农历乙巳[蛇]年十一月十四日。祥龙辞岁去,瑞蛇迎春来,在这曙光初照的…...
【音频伴奏分离】UVR5软件介绍
Ultimate Vocal Remover 5 (UVR5) 是一款功能强大的AI人声伴奏音频分离软件,它能够利用深度学习模型从音频文件中分离出人声和伴奏。UVR5在音乐制作、音频编辑、学习等多种场景中都非常有用。以下是UVR5的一些主要特点和使用方法: 主要特点:…...
安卓触摸事件的传递
setOnTouchListener()返回值的副作用(触摸事件是否继续往下或往后传递)如下: 返回值效果是否往下层view传递是否往当前view的后续监听传递true该pointer离开屏幕前的后续所有触摸事件都会传递给该TouchListener否否false该pointer离开屏幕前…...
51c视觉~合集40
我自己的原文哦~ https://blog.51cto.com/whaosoft/12951385 #SparX 港大提出SparX:强化Vision Mamba和Transformer的稀疏跳跃连接机制 本文分享香港大学计算和数据科学学院俞益洲教授及其研究团队发表于 AAAI 2025 的论文——SparX,一种强化 Visio…...
25年1月更新。一图流Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)
引言 随着 Python 在数据科学、Web 开发、自动化脚本等多个领域的广泛应用,越来越多的开发者选择它作为首选编程语言。而 PyCharm 作为一个功能强大的集成开发环境(IDE),为 Python 开发者提供了极大的便利。本文将详细介绍如何在 …...
C# 设计模式的六大原则(SOLID)
C# 设计模式的六大原则(SOLID) 引言 在面向对象编程中,设计模式提供了高效、可复用和可维护的代码结构。SOLID原则是软件设计中的一组重要原则,用于确保代码具有良好的可维护性、可扩展性和灵活性。SOLID是五个设计原则的首字母…...