Python中的函数包装器

2025 年 3 月 6 日 | 阅读 2 分钟

在 Python 中,装饰器(或称为函数包装器)是非常有用且强大的工具,它们允许程序员在不永久修改函数或类的情况下更改其行为。借助装饰器,我们可以扩展被包装函数的功能,而无需对其进行永久性更改。在装饰器中,函数被作为参数传递给另一个函数,并在包装函数内部被调用。

语法

这也类似于

让我们通过下面的示例来更好地理解。

示例 1

程序说明

该应用程序展示了如何使用 Python 装饰器在函数执行之前和之后提供额外功能。`greet_decorator` 函数包装了主函数,并在函数执行之前和之后打印消息。`decorated_function` 应用了此装饰器以集成此额外行为,并在调用时,除了原始函数的消息外,还会生成预设的消息。

输出

 
Greetings, this is before the main function runs.
This message is inside the main function!
message appears after main function runs.    

示例 2:让我们创建一个装饰器来测量函数执行所需的时间。

程序说明

此 Python 应用程序中定义了 `measure_execution` 装饰器,用于测量和显示函数执行时间。该装饰器应用于 `reverse_count` 方法,该方法从给定的整数开始倒计时到零。当调用 `reverse_count` 时,装饰器会报告函数的执行时间。

输出

 
reverse_count executed in 0.000002 seconds
reverse_count executed in 0.000060 seconds   

值得注意的是,装饰器通常不会改变被包装函数的调用签名或返回值。为了确保可以接受任何输入参数,使用了 `*args` 和 `**kwargs`。几乎所有情况下,装饰器的返回值都是通过调用 `func(*args, **kwargs)` 来获得的,其中 `func` 是最初使用的未包装函数。