python装饰器用法
时间: 2023-07-06 19:33:00 浏览: 98
深入了解Python装饰器的高级用法
装饰器是 Python 中一个非常强大的特性,它可以用来修改或增强函数或类的功能。装饰器本质上是一个函数,可以接收一个函数或类作为参数,并返回一个新的函数或类。装饰器通常用于在不修改函数或类本身的情况下,增加一些额外的功能或修改其行为。以下是一些常见的 Python 装饰器用法示例:
1. 函数装饰器
```python
def my_decorator(func):
def wrapper():
print("Before function is called.")
func()
print("After function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
```
输出结果:
```
Before function is called.
Hello!
After function is called.
```
在这个例子中,我们定义了一个名为 `my_decorator` 的函数装饰器,它接收一个函数作为参数,并返回一个新的函数 `wrapper`。在 `wrapper` 函数中,我们添加了一些额外的代码,用于在函数调用之前和之后执行一些操作。然后,我们使用 `@my_decorator` 语法来装饰 `say_hello` 函数,使其在被调用时自动被 `my_decorator` 装饰器修饰。最后,我们调用 `say_hello` 函数,它会自动执行 `my_decorator` 装饰器中定义的操作。
2. 类装饰器
```python
class MyDecorator:
def __init__(self, func):
self.func = func
def __call__(self):
print("Before function is called.")
self.func()
print("After function is called.")
@MyDecorator
def say_hello():
print("Hello!")
say_hello()
```
输出结果:
```
Before function is called.
Hello!
After function is called.
```
这个例子中,我们定义了一个名为 `MyDecorator` 的类装饰器,它接收一个函数作为参数,并重载了 `__call__` 方法。在 `__call__` 方法中,我们添加了一些额外的代码,用于在函数调用之前和之后执行一些操作。然后,我们使用 `@MyDecorator` 语法来装饰 `say_hello` 函数,使其在被调用时自动被 `MyDecorator` 装饰器修饰。最后,我们调用 `say_hello` 函数,它会自动执行 `MyDecorator` 装饰器中定义的操作。
3. 带参数的装饰器
```python
def repeat(num):
def my_decorator(func):
def wrapper():
for i in range(num):
print("Before function is called.")
func()
print("After function is called.")
return wrapper
return my_decorator
@repeat(num=3)
def say_hello():
print("Hello!")
say_hello()
```
输出结果:
```
Before function is called.
Hello!
After function is called.
Before function is called.
Hello!
After function is called.
Before function is called.
Hello!
After function is called.
```
在这个例子中,我们定义了一个名为 `repeat` 的装饰器工厂函数,它接收一个参数 `num`,并返回一个新的函数装饰器 `my_decorator`。在 `my_decorator` 装饰器中,我们定义了一个新的函数 `wrapper`,它会重复执行被装饰的函数 `num` 次。然后,我们使用 `@repeat(num=3)` 语法来装饰 `say_hello` 函数,使其在被调用时自动被 `repeat` 装饰器修饰,并传递参数 `num=3`。最后,我们调用 `say_hello` 函数,它会自动执行 `repeat` 装饰器中定义的操作,重复执行 `say_hello` 函数三次。
以上是 Python 装饰器的一些常见用法。装饰器是 Python 中非常强大的特性,可以用于各种场景,如日志记录、性能分析、缓存处理等。学会使用装饰器可以让你的代码更加简洁、易读和易于维护。
阅读全文