装饰器是接收函数并返回新函数的高阶函数,用于无侵入增强功能;生成器用yield节省内存,协程通过async/await实现异步;上下文管理器通过__enter__/__exit__确保资源安全;描述符通过__get__/__set__统一控制属性访问。

一、装饰器:函数行为的优雅增强
装饰器本质是接收函数作为参数并返回新函数的高阶函数,用于在不修改原函数代码的前提下添加日志、权限校验、缓存等横切逻辑。使用 @decorator_name 语法糖可清晰表达意图。
常见写法包括无参装饰器(直接包装)、带参装饰器(需多一层闭包)和类装饰器(适合需要状态维护的场景)。注意保留原函数的 __name__ 和 __doc__,推荐用 functools.wraps 装饰内层包装函数。
二、生成器与协程:内存友好与异步编程基础
生成器通过 yield 暂停函数执行并产出中间结果,避免一次性构建大列表,显著节省内存。调用生成器函数返回的是生成器对象,支持 next() 或 for 循环迭代。
Python 3.5+ 引入 async/await 语法,将生成器升级为原生协程。协程函数用 async def 定义,await 只能出现在协程内部,用于挂起当前任务等待 I/O 或其他协程完成。搭配 asyncio.run() 或事件循环可实现高并发轻量级并发。
基于jsp+javabean+mysql三层结构的动态购物网站。网站用户接口(即界面)由jsp完成,数据和逻辑处理由beans完成,数据储存由mysql完成。因为beans独立负责处理整个网站的绝大部分数据,所以整个网站的负载量和速度都将大大提高。而且jsp的特性是一次运行,永远储留内存(包括bean在内),所以基于这种语言和结构开发的购物系统的优势是其它语言没法比尔的。更重要的是,jsp+bea
立即学习“Python免费学习笔记(深入)”;
三、上下文管理器与 with 协议
支持 with 语句的对象需实现 __enter__ 和 __exit__ 方法,确保资源(如文件、锁、数据库连接)在进入和退出时被正确初始化与清理,即使发生异常也不遗漏。
除自定义类外,常用方式还有:
- 使用 contextlib.contextmanager 装饰器,用生成器函数快速定义简单上下文管理器;
- 利用 contextlib.ExitStack 动态管理多个上下文,适合不确定数量或条件性进入的场景。
四、描述符与属性控制机制
描述符是定义了 __get__、__set__ 或 __delete__ 中任一方法的类,用于统一管理类属性的访问逻辑。常见应用包括类型检查、延迟计算属性(__get__ 中首次计算并缓存)、只读属性(__set__ 抛出异常)等。
内置的 @property 实际就是数据描述符的一种封装。若需复用逻辑(如多个字段都需非负校验),可将校验逻辑提取为独立描述符类,提升可维护性。









