Python中的函数装饰器编写方法详解

Python中的函数装饰器是用于扩展或修改函数行为的一种优雅方式,其核心关键词(写法上)依赖于“嵌套函数”和“闭包”特性,要编写一个装饰器,通常需要按照以下模式实现:定义一个外层包装函数,该函数接收一个函数作为参数,在其内部定义嵌套函数(通常用于实际执行逻辑的包装),最后返回嵌套函数,以下是一个典型示例和详细说明。

Python中的函数装饰器怎么编写?

def my_decorator(func):
    def wrapper(*args, **kwargs):
        # 在调用原函数之前执行的操作
        print("Something is happening before the function is called.")
        # 调用原函数,并保存结果
        result = func(*args, **kwargs)
        # 在调用原函数之后执行的操作
        print("Something is happening after the function is called.")
        # 返回原函数的结果
        return result
    return wrapper
# 使用装饰器
@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")
# 调用被装饰的函数
say_hello("Alice")

解析步骤:

  1. 定义装饰器函数my_decorator是一个接收函数func作为参数的装饰器函数。

  2. 嵌套函数:在my_decorator内部,定义了一个嵌套函数wrapper,这个wrapper函数负责在调用原函数func之前和之后执行额外的代码。*args**kwargs允许wrapper接受任意数量和类型的参数,从而使其能够包装任何函数。

  3. 调用原函数:在wrapper内部,通过result = func(*args, **kwargs)调用原始函数,并保存其返回值。

  4. 执行额外操作:在调用原函数前后,可以添加任何需要的额外操作,比如打印日志、修改参数或结果等。

  5. 返回结果wrapper函数返回原函数的返回值,确保被装饰的函数行为与原函数一致,只是增加了额外的功能。

  6. 返回嵌套函数my_decorator最后返回wrapper函数,这样当使用@my_decorator语法时,say_hello实际上被替换为了wrapper函数的引用。

使用装饰器的优势在于它们提供了一种非侵入性的方式来增强函数的功能,而无需修改原函数的代码,这对于日志记录、性能测试、事务处理、权限校验等场景非常有用。

Python中的函数装饰器通过利用嵌套函数和闭包,为代码复用和功能扩展提供了强大的工具,掌握装饰器的编写,可以显著提升代码的可读性和可维护性。

未经允许不得转载! 作者:python1991知识网,转载或复制请以超链接形式并注明出处Python1991知识网

原文地址:https://www.python1991.cn/5302.html发布于:2026-04-11