装饰器是 Python 中一个非常强大且有用的工具,因为它允许程序员修改函数或类的行为。装饰器允许我们在不修改源代码的情况下包装另一个函数,从而扩展被包装函数的行为。
什么是装饰器?
在 Python 中,函数是一等公民(First Class Objects)。这意味着函数可以作为参数传递给其他函数,也可以作为返回值返回,甚至可以赋值给变量。装饰器本质上就是利用了这一特性,它是一个接受函数作为参数并返回一个新函数的可调用对象(通常是函数)。
基本语法
装饰器通常使用 @ 语法糖。以下是一个简单的示例,展示了如何创建一个记录函数执行时间的装饰器:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")
return result
return wrapper
@timer
def my_function():
time.sleep(1)
print("Function executed")
my_function()
带参数的装饰器
有时候我们需要给装饰器本身传递参数。这需要我们在装饰器外层再包裹一层函数。
def repeat(num_times):
def decorator_repeat(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator_repeat
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("World")
类装饰器
除了函数,类也可以作为装饰器使用。类装饰器主要依赖于 __call__ 方法。
常见的内置装饰器
@staticmethod: 定义静态方法@classmethod: 定义类方法@property: 将方法转换为属性调用
装饰器在 Web 框架(如 Flask, Django)中广泛用于路由定义、权限验证等场景。掌握装饰器是进阶 Python 开发者的必经之路。

发表评论 取消回复