代码随香录day21
发布人:shili8
发布时间:2025-02-02 00:31
阅读次数:0
**代码随香录 Day21: 使用 Python 的 Decorator**
欢迎阅读本系列文章的第21 篇——使用 Python 的 Decorator。Decorator 是一种高级编程概念,能够让我们在不改变原有函数定义的情况下,为函数添加额外的功能。
###什么是 Decorator?
Decorator(装饰器)是一种特殊类型的函数,它能作用于另一个函数,使得被装饰的函数具有新的行为。Decorator 的主要目的是为了扩展或修改函数的行为,而不改变原有的函数定义。
### 为什么需要 Decorator?
在实际开发中,我们经常会遇到这样的情况:我们需要为某个函数添加一些额外的功能,例如日志记录、缓存、权限控制等。使用 Decorator 可以让我们轻松地实现这些功能,而不改变原有的函数定义。
### 如何使用 Decorator?
使用 Decorator 的步骤如下:
1. 定义一个装饰器函数,这个函数将被应用到目标函数上。
2. 在装饰器函数中,使用 `@` 符号来引用目标函数。
3. 使用 `return`语句返回装饰后的函数。
### 示例:使用 Decorator 实现日志记录功能
import logging# 定义一个日志记录的装饰器函数def log_decorator(func): def wrapper(*args, **kwargs): # 在函数执行前,记录日志信息 logging.info(f"正在执行函数 {func.__name__}") # 执行目标函数 result = func(*args, **kwargs) # 在函数执行后,记录日志信息 logging.info(f"函数 {func.__name__} 执行完成") return result return wrapper# 定义一个需要日志记录的函数@log_decoratordef add(a, b): return a + b# 使用装饰器函数来执行目标函数result = add(2,3) print(result) # 输出:5
在上面的示例中,我们定义了一个 `log_decorator` 函数,这个函数将被应用到 `add` 函数上。使用 `@` 符号来引用 `add` 函数,然后返回装饰后的函数。
### 示例:使用 Decorator 实现缓存功能
import functools# 定义一个缓存的装饰器函数def cache_decorator(func): cache = dict() @functools.wraps(func) def wrapper(*args, **kwargs): key = str(args) + str(kwargs) if key in cache: return cache[key] result = func(*args, **kwargs) cache[key] = result return result return wrapper# 定义一个需要缓存的函数@cache_decoratordef fibonacci(n): if n < 2: return n else: return fibonacci(n-1) + fibonacci(n-2) # 使用装饰器函数来执行目标函数result = fibonacci(10) print(result) # 输出:55
在上面的示例中,我们定义了一个 `cache_decorator` 函数,这个函数将被应用到 `fibonacci` 函数上。使用 `@functools.wraps(func)` 来保留原有的函数定义,然后返回装饰后的函数。
### 总结本篇文章介绍了 Decorator 的概念和使用方法,通过两个示例来演示 Decorator 的实际应用。在实际开发中,我们可以使用 Decorator 来扩展或修改函数的行为,而不改变原有的函数定义。