Python functools.wraps 详解

文章参考:https://blog.csdn.net/jiang_huixin/article/details/112468649

使用装饰器后, 原函数被内层函数赋值覆盖, 会导致函数名称等信息丢失了(装饰器仅仅是不改变函数原有功能)

使用 func_1 去包装 demo 函数, demo 函数本身的功能没变(仍打印 “demo”), 但是 __name__(函数名称), __doc__(函数文档), __annotations__(函数注释) 等属性变了, 而且 __wrapped__ 属性指向包装函数

 functools.wrap 可用于装饰器的内层函数, 抵消装饰器的副作用

@info 装饰器等价于 multiply = info(multiply), 所以 func 指向原始 multiply 函数, @functools.wraps(func) 使用原始 multiply 函数包装 wrap 函数, 随后 wrap 函数覆盖原始 multiply 函数

注意 wrap 函数与原始 multiply 函数形参必须兼容

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值