python 装饰器练习题
时间: 2023-07-05 19:36:06 浏览: 166
Python作业练习题.zip
好的,来一些 Python 装饰器的练习题吧!
1. 编写一个装饰器,用于计算函数的运行时间。
```python
import time
def calculate_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__}运行时间为{end_time - start_time:.2f}s")
return result
return wrapper
@calculate_time
def test():
time.sleep(3)
test()
```
2. 编写一个装饰器,用于检查函数的参数类型是否正确。
```python
def check_type(*types):
def decorator(func):
def wrapper(*args, **kwargs):
for i, arg in enumerate(args):
if not isinstance(arg, types[i]):
raise TypeError(f"参数 {arg} 不是 {types[i]} 类型")
for kwarg, value in kwargs.items():
if not isinstance(value, types[len(args) + 1]):
raise TypeError(f"参数 {kwarg} 的值 {value} 不是 {types[len(args) + 1]} 类型")
return func(*args, **kwargs)
return wrapper
return decorator
@check_type(int, str, bool)
def test(a, b, c):
print(a, b, c)
test(1, "hello", True)
```
3. 编写一个装饰器,用于检查函数的参数是否符合要求。
```python
def check_param(param):
def decorator(func):
def wrapper(*args, **kwargs):
if len(args) < param:
raise ValueError(f"参数数量不能少于 {param} 个")
if len(args) > param:
raise ValueError(f"参数数量不能多于 {param} 个")
return func(*args, **kwargs)
return wrapper
return decorator
@check_param(3)
def test(a, b, c):
print(a, b, c)
test(1, 2, 3)
```
希望这些练习题可以帮助你更好地理解 Python 装饰器的用法!
阅读全文