Python实践11-装饰器本质

本文深入探讨了Python装饰器的本质,解释了其如何通过包装函数实现功能增强,如日志记录、性能分析及事务处理等。并通过具体示例展示了装饰器的使用方法。

装饰器的本质

Python里的装饰器是一个不太容易理解的东西,下面是一些关于Python装饰器的概念:

  • 从形式上来说是在函数调用上的装饰
  • 以@开头,接着是装饰器的名字和可选的参数
  • 装饰器实质上是函数
  • 装饰器的返回值是一个包装了的函数

装饰器的作用

装饰器用来装饰函数,可以在被装饰的函数调用前做些准备工作,在被装饰的函数调用后做些清理工作,这样的特征使它在AOP(Aspect Oriented Programming面向切面编程)方面被广泛利用。 一般装饰器可以用在下类场景中:

  • 引入日志
  • 计时,用于性能分析
  • 给函数增加事务能力

举例

def delay(func):
    def wrapper(*args, **kwargs):
        time.sleep(1)
        ret = func(*args, **kwargs)
        print("delay 1 second to call %s" % func.__name__)
        return ret
    return wrapper


@delay
def add(a, b):
    return a + b


if __name__ == "__main__":
    add(1, 2)

其中:

  • add是被装饰的函数
  • delay是装饰器
  • wrapper调用被装饰的函数,并作为包装了的函数被返回,注意,Python里面函数就是对象,所以可以被直接返回。

凡是被delay装饰过的函数,都会自动被延迟一秒执行

代码下载

本系列文章和代码已经作为项目归档到github,大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。github仓库地址:jumper2014/PyCodeComplete

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值