关于Python中的装饰器理解与实践案例

原创 以你之姓@ 2025-03-16 17:09 15阅读 0赞

装饰器在Python中是一种特殊类型的函数,它可以在不改变原函数代码的情况下,增加或修改原函数的功能。

以下是装饰器的基本理解和实践案例:

  1. 简单的装饰器:用来打印函数执行前后的时间信息。
  1. import time
  2. def timer_decorator(func):
  3. def wrapper(*args, **kwargs):
  4. start_time = time.time()
  5. result = func(*args, **kwargs))
  6. end_time = time.time()
  7. print(f"Function {func.__name__}} execution time: "
  8. f"{end_time - start_time} seconds")
  9. return result
  10. return wrapper
  11. @timer_decorator
  12. def simple_func():
  13. time.sleep(2)
  14. simple_func()
  1. 更复杂的装饰器:用来处理函数的输入参数,比如校验数据格式、添加默认值等。
  1. import re
  2. def validate_input(func):
  3. def wrapper(*args, **kwargs):
  4. # 校验输入参数的数据格式
  5. input_pattern = r'^[a-zA-Z0-9_]+$'
  6. for arg in args:
  7. if isinstance(arg, str) and not re.match(input_pattern, arg)):
  8. raise ValueError("Invalid input format. All inputs must match the pattern: ^[a-zA-Z0-9_]+$")
  9. # 添加默认值
  10. default_values = {
  11. "param1": None,
  12. "param2": 0,
  13. }
  14. for key, value in kwargs.items():
  15. if key in default_values:
  16. default_values[key] = value
  17. # 调用原函数并处理默认参数
  18. result = func(*args, **kwargs), **default_values)
  19. return result
  20. return wrapper
  21. @validate_input
  22. def process_data(param1=None, param2=0):
  23. print(f"Processing data with param1: {param1}, "
  24. f"and param2: {param2}")
  25. return param1 * 2 + param2
  26. processed_data = process_data(param1=5, param2=10))
  27. print(processed_data)

在这个例子中,@validate_input装饰器对process_data函数进行处理,校验输入参数的数据格式,并添加默认值。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,15人围观)

还没有评论,来说两句吧...

相关阅读