Python 装饰器是什么

Python中的装饰器是一种设计模式,用于在不修改原始函数代码的情况下,给函数添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。装饰器可以在不修改原始函数定义的情况下,增加函数的行为。

装饰器的基本语法如下:

```python
@decorator
def function_to_decorate(*args, **kwargs):
# 函数体
```

这里的`@decorator`就是装饰器的应用,`function_to_decorate`是被装饰的函数。当调用`function_to_decorate()`时,实际上是在调用`decorator(function_to_decorate)`的返回值。

装饰器的工作原理可以分解为以下几个步骤:

1. **定义装饰器**:创建一个函数,它接受一个函数作为参数。
2. **包装函数**:在装饰器内部,定义一个新的函数,这个函数将包装原始函数,并在调用原始函数前后添加额外的行为。
3. **返回包装函数**:装饰器的返回值是一个函数,这个函数将被用来替换原始函数。

下面是一个简单的装饰器示例:

```python
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper

@my_decorator
def say_hello():
print("Hello!")

say_hello()
```

输出结果:
```
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
```

在这个例子中,`my_decorator`是一个装饰器,它接受一个函数`func`作为参数,并返回一个新的函数`wrapper`。`wrapper`函数在调用`func`之前和之后添加了一些额外的打印语句。`say_hello`函数被`@my_decorator`装饰,这意味着`say_hello`实际上被替换为了`my_decorator(say_hello)`的返回值,即`wrapper`函数。

装饰器在Python中非常有用,它们可以用于日志记录、性能测试、事务处理、缓存、权限校验等多种场景。此外,装饰器还可以接受参数,使得它们的功能更加灵活和强大。

posted @ 2024-12-18 11:44  滴滴滴  阅读(45)  评论(0)    收藏  举报