Python带参数的装饰器
时间: 2024-08-02 20:01:08 浏览: 24
Python中的装饰器是一种特殊的函数,它们可以修改其他函数的功能而无需改变其源代码。装饰器本质上是一个接收函数作为输入并返回一个新的函数的高阶函数。当你在一个函数前加上@decorator语法,实际上是将这个函数传递给了装饰器,并把结果赋值回原来的函数名。
带参数的装饰器允许我们在使用装饰器时传入额外的参数,这增加了装饰器的灵活性。例如,你可以创建一个缓存装饰器,通过指定缓存大小或过期时间等参数。下面是一个简单的例子:
```python
def cache_with_timeout(timeout=60):
def decorator(func):
cached_data = {}
def wrapper(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cached_data or (time.time() - cached_data[key][0]) > timeout:
cached_data[key] = [func(*args, **kwargs), time.time()]
return cached_data[key]
return wrapper
return decorator
@cache_with_timeout(120) # 设置缓存时间为2分钟
def my_function(x, y):
# 函数体...
```
在这个例子中,`cache_with_timeout`就是带参数的装饰器,它接受一个`timeout`参数。当我们应用这个装饰器到`my_function`上时,就自动设置了缓存的过期时间。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)