聊聊Python中的装饰器

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

Python装饰器是一种在函数执行前后运行代码的工具,可以修改原函数的参数和返回值,实现功能扩展而不改变原函数代码。示例中展示了如何定义一个计算程序运行时间的装饰器,并介绍了如何创建可以传参的装饰器。使用functools.wraps可以保留原函数的属性。

🎯

关键要点

  • Python装饰器是一种在函数执行前后运行代码的工具,可以修改原函数的参数和返回值。
  • 装饰器能够在原函数执行前或执行后运行代码,实现约束定义、调试程序、注册函数等目标。
  • 装饰器一般返回一个包装器,使用functools.wraps可以保留原函数的属性。
  • 示例中定义了一个计算程序运行时间的装饰器,可以在不改变原函数代码的情况下添加功能。
  • 可以创建可以传参的装饰器,通过在wrapper外加一层包装实现。
  • functools.wraps用于保留原函数的属性,避免被装饰器破坏。

延伸问答

Python装饰器的主要功能是什么?

Python装饰器可以在函数执行前后运行代码,修改原函数的参数和返回值,实现功能扩展而不改变原函数代码。

如何定义一个计算程序运行时间的装饰器?

可以通过定义一个包装器函数,在其中记录开始和结束时间,并计算运行时间,最后打印出来。

什么是functools.wraps,它有什么作用?

functools.wraps是一个装饰器,用于保留原函数的属性,避免被装饰器破坏。

如何创建一个可以传参的装饰器?

通过在包装器外再加一层包装函数,可以实现传参的装饰器。

装饰器可以用于哪些场景?

装饰器可以用于约束定义、调试程序、注册函数等多种场景。

使用装饰器时如何确保原函数的属性不被改变?

使用functools.wraps可以确保原函数的属性不被装饰器改变。

➡️

继续阅读