发布时间:2026/8/23 18:48:21
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/8/23 18:43:21

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

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

2026/8/23 18:43:21

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

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

2026/8/23 22:13:52

AI技术冲击下的行业差异:程序员拥抱与音乐人抗拒的深层逻辑

1. 一个现象背后的行业逻辑拆解最近在几个技术社区和音乐人论坛潜水,发现一个挺有意思的对比。程序员圈子,甭管是前端、后端还是算法,聊起AI来那叫一个热火朝天,从GitHub Copilot到各种大模型API,恨不得把AI焊进自己的…

2026/8/23 22:13:52

H3C STP真题解析:从根桥选举到端口角色,掌握二层防环核心

1. 从一道真题看生成树协议的核心价值最近在整理网络工程师的备考资料,翻到几道关于H3C设备上生成树协议(STP)的真题,发现很多朋友对STP的理解还停留在“防止环路”这个简单的概念上。一旦题目稍微绕个弯,涉及到端口角…

2026/8/23 22:08:52

Python实现智能就业推荐系统:提升求职效率37%

1. 项目背景与核心价值最近帮学弟改简历时发现一个现象:很多计算机专业毕业生投递岗位时存在严重的信息不对称。有人拿着机器学习项目经验去投前端开发,也有人精通数据分析却申请了运维岗位。这种错配不仅浪费求职者时间,也让企业HR筛选简历的…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…