`n 什么是Python的装饰器,如何使用它们?

什么是Python的装饰器,如何使用它们?

Clock Icon 发布时间:2026/11/8 1:09  · 

装饰器是NET/" style="text-decoration: none; color: inherit;" title="Python">Python中的一种强大工具,它本质上是一个函数,能够在不修改原有函数代码的情况下,动态地增强或改变函数的行为。使用装饰器,可以以一种优雅的方式添加一些额外的功能,例如日志记录、权限校验、性能测试等。
要创建一个装饰器,可以定义一个外层函数,它接收一个目标函数作为参数,并在内部定义一个内部函数。内部函数可以扩展目标函数的功能,最后返回这个内部函数。这样一来,目标函数就被“包装”起来了。
下面是一个简单的示例:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Pythondef my_decorator(func): def wrapper(): print("在函数调用前执行") func() print("在函数调用后执行") return wrapper```
使用装饰器时,可以通过“@”符号将其应用于目标函数。比如:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Python@my_decoratordef say_hello(): print("你好!")```
当调用`say_hello()`时,实际上调用的是`wrapper()`函数。在执行时,会在目标函数前后打印额外的信息。
装饰器不仅限于无参数函数,仍可以处理带参数的函数。只需在内部函数中添加参数,并在调用原函数时传递这些参数。
示例代码如下:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Pythondef my_decorator(func): def wrapper(*args, **kwargs): print("函数即将被调用") result = func(*args, **kwargs) print("函数已被调用") return result return wrapper```
这种方式可以很方便地修饰带参数的函数。可以这样使用:
```NET/" style="text-decoration: none; color: inherit;" title="Python">Python@my_decoratordef add(a, b): return a + b```
调用`add(3, 5)`时,会在函数调用前后显示信息,同时返回正确的加法结果。
除了自定义装饰器,NET/" style="text-decoration: none; color: inherit;" title="Python">Python内置了一些装饰器,比如`@staticmethod`和`@classmethod`,用于类的方法修饰。
装饰器还可以叠加使用,即多个装饰器可以同时作用于同一个函数,顺序上从内向外执行。这为代码的组合提供了灵活性和可重用性。
注意装饰器的使用需要保证代码清晰,避免滥用,影响程序的可读性。
在实际应用中,装饰器在日志记录、性能监控、安全性控制等很多场景下都有重要用途,极大方便了代码的管理与扩展。
装饰器作为一种功能强大的编程工具,能让代码更加模块化,使得增强函数的能力变得轻松而灵活,适合各种类型的应用。

推荐文章

热门文章