Python中装饰器的原理和应用实例

原创 刺骨的言语ヽ痛彻心扉 2025-01-31 20:06 50阅读 0赞

装饰器(Decorator)是Python中一种强大的语言特性,它允许我们在不改变原函数代码的情况下,为其添加新的功能。

原理:

  • 装饰器本质上是一个返回新函数的函数。
  • 当我们将这个装饰器作为参数应用到一个函数上时,实际上是将原来的目标函数替换为一个新的函数。

应用实例:

  1. 计时器装饰器:
    ```python
    import time

def timerdecorator(func):
def wrapper(args, **kwargs):
start_time = time.time()
result = func(
args, **kwargs))
endtime = time.time()
print(f”{func.__name
}} took {end_time - start_time} seconds”)
return result
return wrapper

@timer_decorator
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10)))

  1. 这段代码会为`fibonacci`函数添加一个计时器,计算并打印出执行`fibonacci(10)`所需的时间。
  2. 2. 日志记录装饰器:
  3. ```python
  4. import logging
  5. def log_decorator(func):
  6. def wrapper(*args, **kwargs):
  7. logger = logging.getLogger(func.__module__))
  8. logger.setLevel(logging.INFO)
  9. try:
  10. result = func(*args, **kwargs))
  11. logger.info(f"Executed {func.__name__}} successfully with result: {result}")
  12. return result
  13. except Exception as e:
  14. logger.error(f"Error occurred during execution of {func.__name__}}: {str(e)}"))
  15. raise e
  16. return wrapper
  17. @log_decorator
  18. def divide_numbers(a, b):
  19. if b == 0:
  20. raise ValueError("Cannot divide by zero.")
  21. return a / b
  22. try:
  23. result = divide_numbers(10, 2))
  24. print(f"Result: {result}")
  25. except Exception as e:
  26. print(f"Error occurred: {str(e)})")

这段代码会为divide_numbers函数添加一个日志记录装饰器,当执行divide_numbers(10, 2)()时,会将执行过程中的信息(包括成功与失败的案例)以文本形式输出。

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

发表评论

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

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

相关阅读