装饰器
Python 装饰器(Decorator)教程
1. 装饰器基础概念
装饰器是 Python 中一种强大的语法特性,它允许在不修改原函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个高阶函数,它接受一个函数作为参数,并返回一个新的函数。
1.1 函数作为对象
在 Python 中,函数也是对象,可以赋值给变量:
每个函数对象都有一个 __name__ 属性:
2. 简单装饰器实现
2.1 基本装饰器
下面是一个简单的装饰器示例,它在函数调用前后打印日志:
@log 语法等同于 now = log(now)。
2.2 保留原函数元信息
使用装饰器后,函数的 __name__ 等元信息会改变:
为了解决这个问题,可以使用 functools.wraps:
3. 带参数的装饰器
如果需要向装饰器传递参数,需要再嵌套一层函数:
这种三层嵌套的装饰器等价于 now = log('执行')(now)。
4. 实践练习
4.1 计算函数执行时间
4.2 通用日志装饰器
实现一个既能作为简单装饰器,又能接受参数的装饰器:
5. 类装饰器
装饰器也可以使用类来实现:
6. 最佳实践
- 始终使用
functools.wraps保留原函数元信息 - 保持装饰器代码简洁,只添加必要的功能
- 考虑装饰器的可重用性
- 避免过度使用装饰器,以免降低代码可读性
7. 总结
装饰器是 Python 中非常强大的特性,它可以:
- 在不修改原代码的情况下扩展功能
- 实现横切关注点(如日志、计时、权限检查等)
- 使代码更加模块化和可重用
掌握装饰器能让你写出更优雅、更 Pythonic 的代码。

