关于Python中的装饰器理解与实践案例
装饰器在Python中是一种特殊类型的函数,它可以在不改变原函数代码的情况下,增加或修改原函数的功能。
以下是装饰器的基本理解和实践案例:
- 简单的装饰器:用来打印函数执行前后的时间信息。
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs))
end_time = time.time()
print(f"Function {func.__name__}} execution time: "
f"{end_time - start_time} seconds")
return result
return wrapper
@timer_decorator
def simple_func():
time.sleep(2)
simple_func()
- 更复杂的装饰器:用来处理函数的输入参数,比如校验数据格式、添加默认值等。
import re
def validate_input(func):
def wrapper(*args, **kwargs):
# 校验输入参数的数据格式
input_pattern = r'^[a-zA-Z0-9_]+$'
for arg in args:
if isinstance(arg, str) and not re.match(input_pattern, arg)):
raise ValueError("Invalid input format. All inputs must match the pattern: ^[a-zA-Z0-9_]+$")
# 添加默认值
default_values = {
"param1": None,
"param2": 0,
}
for key, value in kwargs.items():
if key in default_values:
default_values[key] = value
# 调用原函数并处理默认参数
result = func(*args, **kwargs), **default_values)
return result
return wrapper
@validate_input
def process_data(param1=None, param2=0):
print(f"Processing data with param1: {param1}, "
f"and param2: {param2}")
return param1 * 2 + param2
processed_data = process_data(param1=5, param2=10))
print(processed_data)
在这个例子中,@validate_input
装饰器对process_data
函数进行处理,校验输入参数的数据格式,并添加默认值。
还没有评论,来说两句吧...