Python:闭包与装饰器

Python函数进阶:闭包、装饰器、生成器、协程 目录 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++、Java、JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现。 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包。” 其实,简单来说,你可以将闭包看成是一个轻载的类,... 阅读详情

闭包:

在函数内部再定义一个函数,并且内部这个函数用到了外边函数的变量,那么将内部函数以及用到的一些变量称之为闭包。

# 两个函数嵌套,外层函数返回内层函数的引用,  外层函数必须传参数-->外层函数不传参相当于只定义内层函数,没有什么用。

注意点:

由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存。

装饰器:

上例 @w1内部会执行一下操作: @函数名 是python的一种语法糖。

执行w1函数 ,并将 @w1 下面的函数作为w1函数的参数,即:@w1 等价于 w1(f1) 所以,内部就会去执行:

def w1(func):
    def inner():
        # 验证1
        # 验证2
        # 验证3
        func()
    return inner

@w1
def f1():
    print('f1')

w1的返回值

将执行完的w1函数返回值 赋值 给@w1下面的函数的函数名f1 即将w1的返回值再重新赋值给 f1,即:

新f1 = def inner(): 
            #验证 1
            #验证 2
            #验证 3
            原来f1()
        return inner

所以,以后业务部门想要执行 f1 函数时,就会执行 新f1 函数,在新f1 函数内部先执行验证,再执行原来的f1函数,然后将原来f1 函数的返回值返回给了业务调用者 

如此一来, 即执行了验证的功能,又执行了原来f1函数的内容,并将原f1函数返回值 返回给业务调用着

 代码执行顺序:第1行(指向了2-5行)--> 第7 行-->第6行-->第5行--> 第11行-->3-->4-->8

 

Python的函数式编程: 闭包与装饰器 操作类型例子是否需要nonlocal备注读取print(x)NoLEGB 规则自动查找修改可变对象No引用地址未变,只是内容变了重赋值/修改不可变对象count = 5或count += 1Yes否则会变成创建新的局部变量多线程状态管理count += 1禁止线程不安全,请改用 Class + Lock如果你在内部函数里写了 变量名 = ...(包括+=), 并且你想改的是外面的那个变量,那就必须加nonlocal。否则都不需要。闭包:自带干粮(环境数据)的函数。装饰器。 阅读详情

相关推荐

14、Python高级技巧:玩转装饰器与闭包

本文深入探讨了Python中的装饰器和闭包,两种高级语言特性。装饰器用于修改函数或方法的行为,而闭包则允许函数记住并访问其创建时的环境。文章通过实际案例展示了装饰器和闭包的应用场景和实用技巧,并提醒读者在性能敏感的场景中使用时要谨慎。最后,文章强调了在适当情况下使用装饰器和闭包可以提高代码的灵活性和可读性。

silenceallat的博客 884

07. Python函数进阶:从作用域到闭包与装饰器

写完这篇博客,感觉自己对Python的理解又深了一层。作用域是Python查找变量的规则,记住LEGB和globalnonlocal的用法,就能解决大部分变量报错问题。闭包是函数式编程的思想,它让函数有了“记忆”,能保存状态。装饰器是Python的“语法糖”,它利用了闭包的特性,让我们可以优雅地在不修改源码的情况下增强函数功能,这在以后会非常常见。虽然这些概念刚开始有点绕,但只要多写几遍代码,调试一下,就能豁然开朗了!希望这篇笔记能帮到正在学习Python进阶的你。有什么问题欢迎在评论区交流。

学习。 773

Python装饰器原理与实战:从闭包到生产级应用

Python装饰器是一种基于函数一等公民特性的高阶函数设计模式,其核心原理依赖于闭包机制、*args/**kwargs泛化调用及functools.wraps元信息保留。它将横切关注点(如日志、认证、重试、缓存)从主业务逻辑中解耦,显著提升代码复用性与可维护性。在Web开发、微服务治理和可观测性建设中,装饰器被广泛用于实现权限控制、限流熔断、性能监控等关键能力。本文深入剖析装饰器的底层机制,并提供无参/带参/类/组合四类典型实现,覆盖从入门理解到生产落地的完整技术路径。

422

Python 闭包与装饰器:从原理到实战详解

你是否经常在函数前后重复写日志、计时、校验的代码?你是否羡慕过别人几行注解就能实现权限控制和缓存加速?其实,这些优雅背后的秘密武器就是Python的闭包与装饰器。很多人知道怎么用@,却搞不清楚闭包为什么能“记住”外部变量,更不知道装饰器链是如何执行的。这篇文章将用最通俗的比喻和循序渐进的代码演变,带你从零理解闭包的“记忆效应”,并亲手打造出能传参、能嵌套、能反射的工业级装饰器。读完你会发现,原来Python的“可读性”与“强大”之间,只差这一层对函数的深层理解。

jtgza的博客 559

Python装饰器本质:函数替换、闭包与元数据管理

装饰器是Python中实现横切关注点(如日志、缓存、校验)的核心机制,其本质并非语法糖,而是函数对象的动态替换过程——通过高阶函数返回闭包,在函数定义时完成变量名绑定覆盖。理解这一原理,才能规避元数据丢失、递归陷阱和类型不匹配等高频问题。闭包确保装饰器能‘记住’被包装函数,而@wraps则保障__name__、__doc__等关键属性不被覆盖。在Web开发、数据处理和API服务等场景中,合理使用装饰器可显著提升代码复用性与可维护性,但需警惕性能开销与执行时机陷阱。

weixin_30655569的博客 397

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1407

Python 闭包与装饰器:从入门到精通

本文深入讲解Python中的闭包和装饰器两大高级特性。闭包是内部函数引用外部变量形成的结构,需满足嵌套函数、返回内部函数、引用外部变量等条件。装饰器基于闭包实现,通过语法糖@简化包装过程,支持参数通配(*args/**kwargs)、元信息保留(@wraps)和多层叠加(从下往上执行)。文章还涵盖带参装饰器的三层嵌套实现,并对比闭包与装饰器的核心差异,强调闭包作为装饰器基础的重要性。通过登录检查、耗时统计等案例演示实际应用,帮助读者掌握这两个关键概念。

qq_58109679的博客 162

Quartus Prime器件库安装实战:从版本选择到权限避坑指南

本文详细介绍了Quartus Prime器件库的安装全流程,从版本选择、精准下载到权限设置和安装验证。重点解析了版本匹配的黄金法则、管理员权限的必要性以及安装路径的最佳实践,帮助用户避开常见陷阱,确保器件库安装一次成功。

weixin_33713707的博客 514

python高阶函数闭包装饰器_Python函数:Lambda,闭包,装饰器和Currying

了解Python中的四个高级函数概念> Photo by Tim Swaan on Unsplash.Python函数是一段代码,可在需要运行时执行特定的操作,我们称其为函数。 大多数时候,我们使用以下语法声明并调用函数:在上面的代码中,我们使用def关键字声明了一个名为add_up的函数。 此函数将两个数字(num1和num2)作为输入参数,计算它们的总和作为已定义的运算,然后将此值作为函数的输...

weixin_39557797的博客 305

BLDC方波控制双闭环Simulink仿真模型

无刷直流电机方波控制双闭环Simulink仿真模型搭建详细教程,包括速度PI环、电流PI环、换向逻辑和受控电压源,仿真结果良好。

m0_57458432的博客 6869

DexProtector内存校验绕过与DEX提取实战

DEX文件是Android应用的核心执行单元,其动态加载与运行时保护机制直接关系到App安全强度。DexProtector作为主流商业加固方案,摒弃传统文件级防护,转而依托ART虚拟机下的匿名内存映射段(anonymous mmap)构建多维校验体系——涵盖字节码完整性校验、内存页属性检测及运行时环境感知。其技术价值在于将防护锚点从静态APK迁移至动态内存态,大幅提升逆向门槛。典型应用场景包括金融类App的防篡改加固、游戏客户端的反外挂保护,以及政企应用的合规性安全增强。本文聚焦DexProtector v

weixin_30315435的博客 714

Python 闭包与装饰器入门:30分钟快速上手

摘要: 闭包和装饰器是Python中用于简化代码、增强功能的实用工具。闭包让函数能“记住”外部变量,常用于计数器、函数工厂等场景;装饰器则基于闭包,在不修改原函数代码的情况下为其添加额外功能(如日志、计时、权限验证)。本文通过咖啡机比喻和简单代码示例,讲解闭包的定义与用法,以及装饰器的基本语法(含@wraps保留原函数信息)。新手只需30分钟即可掌握核心要点:闭包保存状态,装饰器扩展功能,@语法糖简化调用。附实战案例(计时器、登录验证)和常见避坑指南,助你写出更优雅的代码。

2601_96523516的博客 537

Vivado时序违约小结

目录1. setup time违约1.1 逻辑级数太高1.2 Fanout太大2. hold time 违约2.1 异步信号处理导致hold time违约 1. setup time违约 建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大,当然也可以尝试通过降频来解决建立时间违约。 1.1 逻辑级数太高 Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能

mu_guang_的博客 7155

Python闭包与装饰器:代码封装的魔法

本文摘要:闭包和装饰器是Python中两个重要的函数式编程概念。闭包通过嵌套函数实现,内部函数引用外部函数变量并延长其生命周期,需满足三个构造条件:函数嵌套、内部引用外部变量、外部返回内部函数名。装饰器基于闭包实现,在不修改原函数代码的前提下扩展功能,常见于日志记录、权限控制等场景。文章详细介绍了装饰器的六种应用形式(无参/有参、无返回值/有返回值、可变参数、多装饰器叠加、带参装饰器),并通过代码示例演示了语法糖的使用方法。带参装饰器实质是在外层再封装一层参数接收函数,内部返回装饰器本身。

2403_87067623的博客 216

X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (二) 摩尔纹的产生机理

1,横向摩尔纹的表现 2,纵向摩尔纹的表现 3,摩尔纹在pitch = 143μm(注:pitch为采样间隔/周期)的FPD上的表现。 4,摩尔纹的危害(严重的影响了临床诊断) 5,摩尔纹对胸片肺部肺纹理的破坏 6,滤线栅的频率(滤线栅生产厂家的产品参数)。判断摩尔纹产生的重要依据之一 7,DR平板探测器的采样频率/空间极限分辨率 l.........

松下J27录放机 4981

第七天 Labview进阶(7.4 NI Vision简单使用)

NIVision机器视觉软件使用指南 摘要:NIVision是National Instruments推出的高效机器视觉软件,具有硬件无缝集成、图形化编程和工业级部署等优势。本文介绍了NIVision的安装步骤(需Vision Acquisition和Vision Development模块)及三个典型应用案例:1)实物检测通过IMAQCreate等模块实现物体识别与坐标定位;2)OCR检测利用IMAQOCR系列模块完成字符识别;3)几何模板匹配使用IMAQLearnGeometricPattern等模块实

weixin_38637405的博客 771

Python 闭包与装饰器:原理、应用及实战解析

多个装饰器从下到上进行包装,但调用时从上到下进入包装函数,退出时再从下到上返回。闭包的核心不是“函数里面再定义函数”,而是内层函数保存了外层函数的变量。例如,计数器可以把当前次数保存在外层函数中,不需要依赖全局变量,也不会和其他计数器互相干扰。装饰器在函数定义阶段执行一次,包装后的函数在调用阶段执行。有参装饰器比无参装饰器多一层函数:第一层接收装饰器配置参数,第二层接收被装饰函数,第三层接收业务函数的实际参数。,被装饰函数的名称、文档字符串和模块信息会被替换成包装函数的信息。带有副作用的函数不应直接缓存。

2501_91671229的博客 235

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2744

python反射、闭包、装饰器_Python:从闭包到装饰器

Python:从闭包到装饰器闭包闭包的概念在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。[1]以下给出一个闭包的例子:def outer():a = 10def inner():b= 10print(b)print(a)return innerif __name__ == '__main__':inner_func = ou...

weixin_39554021的博客 148

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Python】基础语法入门(十一)—— 函数进阶:作用域、闭包与装饰器

本文深入讲解Python函数三大进阶特性:作用域、闭包和装饰器。首先解析LEGB变量查找规则,通过示例展示global和nonlocal关键字的使用场景。其次阐述闭包原理,说明如何让函数记住外部状态,并给出工厂模式等实际应用。重点剖析装饰器机制,从基础实现到带参数的高级用法,结合@语法糖演示无侵入式功能增强技巧。最后总结最佳实践,包括保留元信息的functools.wraps用法,并推荐缓存装饰器等实战练习。这些概念是编写优雅Python代码的核心技术,能显著提升代码复用性和可维护性。

m0_67393827的博客 980

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深入理解Python闭包与装饰器:从原理到实战

闭包是指在一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量(非全局变量),当外部函数返回内部函数时,这个内部函数就形成了一个闭包。简单来说,闭包是一个函数加上其创建时的环境(即外部函数的局部变量)。装饰器本质上是一个接受函数作为参数并返回函数的高阶函数。它用于在不修改原函数代码的情况下,为函数添加额外的功能。装饰器是闭包的一个典型应用场景。闭包允许函数"记住"其创建时的环境,是创建有状态函数和工厂函数的有效方式。装饰器日志记录性能监控权限验证缓存优化错误重试输入验证。

2503_91428579的博客 186

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python基础:闭包和装饰器

print('昵称:两点水 部门:做鸭事业部 上班打卡成功')punch()昵称:两点水 部门:做鸭事业部 上班打卡成功然后,产品反馈,不行啊,怎么上班打卡没有具体的日期,加上打卡的具体日期吧,这应该很简单,分分钟解决啦。print('昵称:两点水 部门:做鸭事业部 上班打卡成功')punch()2018-01-09昵称:两点水 部门:做鸭事业部 上班打卡成功。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1490

Python:装饰器与闭包

python中的装饰器真的是个很难理解的概念,以下只是我在学习过程中的一点浅见,学习交流。 1 闭包 在谈装饰器之前,不得不说一下闭包的概念。什么是闭包呢?维基百科上是这么讲的—— 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 简直不像人话。我们通过一小段代码来感受一下闭包: def foo(.

joker_zsl的博客 316

Python入门13:Python闭包与装饰器

《Python闭包与装饰器:从入门到精通,掌握高级编程技巧》 你是否曾在Python编程中遇到过这样的问题:如何在函数执行后保留局部变量?如何在不修改原函数代码的情况下为其添加新功能?这些问题都可以通过Python中的闭包和装饰器来解决! 本文将带你深入理解Python闭包和装饰器的核心概念,并通过大量代码示例帮助你掌握这些高级编程技巧。无论你是Python初学者,还是有一定经验的开发者,这篇博客都将为你提供宝贵的学习资源。

m0_74488469的博客 1121

Python 中闭包与装饰器:核心概念与实战应用

深入探讨了 Python 中的闭包和装饰器,两个关键概念。闭包允许函数记住并访问其定义时的词法作用域,即使该函数在其他作用域中被调用。装饰器则基于闭包,能够在不修改原函数代码的情况下,为其添加新功能。文章详细讲解了闭包的创建与作用,以及装饰器的定义、使用方法和实际应用场景,包括通用装饰器和类装饰器。通过示例代码,展示了如何利用闭包和装饰器实现代码的模块化和可重用性,提升代码的可读性和可维护性。

qq_62774262的博客 803

python:闭包和装饰器

python的闭包和装饰器

mengnf的专栏 230
上一篇: Python:多任务,并发,并行的理解及线程、进程的对比
下一篇: Django之model F/Q以及多对多操作
python_nice
博客等级 码龄8年 46粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值