`n 如何在Python中使用装饰器?

如何在Python中使用装饰器?

Clock Icon 发布时间:2026/8/28 0:08  · 

NET/" style="text-decoration: none; color: inherit;" title="Python">Python中,装饰器是用于修改或扩展已有函数或方法的强大工具。它可以通过在函数定义前加上装饰器来使用,提供了一种灵活且可重用的方式来增强功能。装饰器实际上是一个可以接受函数作为参数并返回一个新函数的高阶函数,这样可以在不改变原始函数代码的前提下增加额外的功能。
创建装饰器的基本步骤是首先定义一个外部函数,它接受一个函数作为参数。然后,在这个外部函数内部,定义一个内部函数,该函数使用原始函数的功能,并在此基础上添加新的功能。最终,外部函数返回这个内部函数。示例代码如下:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Pythondef my_decorator(func): def wrapper(): print("做一些事情前") func() print("做一些事情后") return wrapper```
可以通过在被装饰的函数前添加装饰器符号 `@装饰器名称` 来使用该装饰器。这种语法糖使得代码更加简洁且易读。示例中,可以这样应用装饰器:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Python@my_decoratordef say_hello(): print("你好!")```
调用 `say_hello()` 会输出以下结果:
```做一些事情前你好!做一些事情后```
装饰器可以传递参数,提供更大的灵活性。通过在外部函数中添加另一个参数,可以将用户自定义的参数传递给装饰器。例如:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Pythondef repeat(num_times): def decorator_repeat(func): def wrapper(*args, **kwargs): for _ in range(num_times): func(*args, **kwargs) return wrapper return decorator_repeat```
使用此装饰器可以指定重复执行的次数,示例如下:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Python@repeat(3)def say_goodbye(): print("再见!")```
调用 `say_goodbye()` 时会得到三遍“再见!”的输出。
装饰器的另一个常见用途是跟踪执行时间,处理访问控制或记录日志。通过这些功能,开发者能够更好地管理和维护代码。
NET/" style="text-decoration: none; color: inherit;" title="Python">Python标准库中, functools 模块提供了一些有用的装饰器,例如 `lru_cache`。它用于缓存函数的返回值,尤其适合于递归函数,以提高性能。
要创建复杂的装饰器,通常需要嵌套多个函数并确保正确处理参数和返回值。在实际使用中,合理结构和清晰命名将有助于提高代码的可维护性。装饰器对于开发可读、重用和易于测试的代码尤为重要。
使用装饰器不仅可以使代码清晰简洁,也能降低耦合度。通过将横向关注点(例如日志、权限检查等)与业务逻辑分开,开发者能够更专注于核心功能实现。

推荐文章

热门文章