Python进阶教程:装饰器与生成器深入

发布时间:2026/10/21 9:12:47

Python进阶教程:装饰器与生成器深入 目录Python进阶教程装饰器与生成器深入一、函数是一等公民二、装饰器基础三、带参数的装饰器四、常用内置装饰器五、生成器基础六、生成器表达式七、生成器实战无限序列八、实战缓存装饰器总结Python进阶教程装饰器与生成器深入本文是Python 入门教程系列的第 13 篇扩展篇。装饰器和生成器是 Python 中非常优雅的两个特性本篇深入讲解。一、函数是一等公民在 Python 中函数可以像变量一样传递和返回这是装饰器的基础defgreet(name):returnf你好{name}# 函数可以赋值给变量saygreetprint(say(张三))# 你好张三# 函数可以作为参数传递defcall_twice(func,arg):returnfunc(func(arg))print(call_twice(greet,张三))# 你好你好张三二、装饰器基础装饰器可以在不修改原函数的情况下增强函数功能importtimedeftimer(func):统计函数执行时间的装饰器defwrapper(*args,**kwargs):starttime.perf_counter()resultfunc(*args,**kwargs)elapsedtime.perf_counter()-startprint(f{func.__name__}耗时{elapsed:.4f}s)returnresultreturnwrappertimerdefslow_add(a,b):time.sleep(0.1)returnabprint(slow_add(1,2))# slow_add 耗时 0.1xxx s3三、带参数的装饰器importfunctoolsdefrepeat(times):让函数重复执行的装饰器带参数defdecorator(func):functools.wraps(func)# 保留原函数信息defwrapper(*args,**kwargs):for_inrange(times):resultfunc(*args,**kwargs)returnresultreturnwrapperreturndecoratorrepeat(times3)defsay_hello():print(Hello!)say_hello()# 打印 3 次 Hello!四、常用内置装饰器classMyClass:class_var0def__init__(self,value):self._valuevaluepropertydefvalue(self):只读属性returnself._valuevalue.setterdefvalue(self,new_val):属性赋值检查ifnew_val0:raiseValueError(不能为负)self._valuenew_valclassmethoddefcreate(cls):类方法returncls(0)staticmethoddefhelper():静态方法return工具函数objMyClass(10)print(obj.value)# 10obj.value20# 调用 setterprint(obj.value)# 20print(MyClass.create().value)# 0print(MyClass.helper())# 工具函数五、生成器基础生成器用yield逐次产出值不一次性占用内存defcount_up_to(n):i1whilein:yieldi# 暂停并返回i1gencount_up_to(5)print(next(gen))# 1print(next(gen))# 2print(list(gen))# [3, 4, 5] 继续消费剩余六、生成器表达式# 列表推导式 vs 生成器表达式squares_list[x*xforxinrange(1000000)]# 立即占用内存squares_gen(x*xforxinrange(1000000))# 惰性求值# 生成器可以传给 sum 等函数print(sum(x*xforxinrange(10)))# 285# 内存对比importsysprint(sys.getsizeof([xforxinrange(100000)]))# 约 800KBprint(sys.getsizeof((xforxinrange(100000))))# 约 112B七、生成器实战无限序列deffibonacci():无限斐波那契序列生成器a,b0,1whileTrue:yielda a,bb,ab fibfibonacci()# 取前 10 个print([next(fib)for_inrange(10)])# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]八、实战缓存装饰器importfunctoolsimporttimedefmemoize(func):手写缓存装饰器cache{}functools.wraps(func)defwrapper(*args):ifargsnotincache:cache[args]func(*args)returncache[args]returnwrappermemoizedefexpensive(n):print(f计算{n}...)time.sleep(1)returnn*n starttime.perf_counter()print(expensive(5))# 计算 5... 25print(expensive(5))# 直接命中缓存 25不打印计算print(f耗时{time.perf_counter()-start:.1f}s)# 约 1s总结本篇深入讲解了装饰器基础、带参数、内置装饰器和生成器基础、表达式、无限序列并用手写缓存装饰器串联实战。理解这两个特性能写出更简洁、更 Pythonic 的代码。
延伸阅读

更多相关文章

2026/10/21 16:24:24

智能体指令工程化:从混沌到秩序的维护与演化实践

1. 项目概述:一次关于开发者如何“调教”智能体的深度田野调查最近和几个做AI应用的朋友聊天,大家不约而同地提到了同一个痛点:给AI智能体(Agent)写的那套“说明书”——也就是指令(Instructions&#xff0…

2026/10/20 18:32:56

TOBench:面向真实世界的AI智能体全模态评测基准解析

1. 项目缘起:为什么我们需要一个“全能”的智能体评测基准?最近几年,AI智能体(Agent)的概念火得一塌糊涂,从AutoGPT到各种基于大模型的自动化工具,大家都在畅想一个能帮我们处理各种琐碎任务的“…

2026/10/22 6:12:46

从零实现轻量级响应式核心:状态管理、依赖追踪与更新调度

1. 从“rea”这个标题说起:一个极简命名背后的项目思维第一次看到“rea”这个标题,很多人会愣一下——三个字母,没有上下文,没有说明,甚至连大小写都没区分。但恰恰是这种极简命名,在技术圈里反而特别常见。…

2026/10/22 6:12:46

从生成到修复:代码智能体71%修复率背后的技术拆解

2. 从“生成代码”到“修复代码”:一次能力重心的迁移先说一个我在实际使用中的感受:过去两年,大多数人谈论代码智能体时,焦点几乎都放在“能不能一次写对”上。但真实项目里,代码智能体真正让人头疼的,从来…

2026/10/22 6:12:46

基于Spring Boot的线下演出售票管理系统:选座锁座与并发防超卖实战

又是一年毕设季,每年这个时候都有一堆人问我选什么题目,搞得我像个选题机器。今天直接分享一个我比较看好的方向:基于 Spring Boot 的线下演出售票管理系统。这个题目不算新,但胜在业务场景完整、技术栈实用、答辩好讲、代码量适中…

2026/10/22 6:12:46

风能预报智能管理系统实战:从数据治理到预测准确率提升

简介:《风电场风能预报智能管理系统使用手册(v2.0)》是由北京国能日新系统控制技术有限公司发布的技术文档,面向风电场运维、调度与管理人员,系统讲解智能预报平台的主界面、用户管理、系统设置、状态监测、预测曲线与气象信息等核心模块&…

2026/10/22 6:07:46

5G高速场景接通率优化:Highspeed UE参数建模与实战调优

简介:本资源是一份面向5G网络优化工程师与通信运维技术人员的实战型参数调优案例文档,聚焦高铁等高速移动场景下因信道快速时变、切换频繁导致的RRC连接成功率与QoS流建立成功率偏低问题。文档基于爱立信5G NSA网络环境,系统梳理High speed U…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑