装饰器是 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 开发者的必经之路。

点赞(10) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部