python对装饰器的理解

1、本质
装饰器本质上就是一个函数,在不修改源代码,调用方法的前提下,用来给其他函数添加功能的函数

2、实例
如果我们有一个这样的函数,打印输出hello decorator

def test1():
    print('-----hello  decorator -----')

但是,我们想在不修改函数源代码,不修改调用方法前提下,增加一个打印语句hello world
我们需要再次定义一个函数:而这个函数,就是一个最简单的装饰器:

 def warpper(func):
     def inner():
         print('hello world')
         func() 
     return inner

warpper函数内嵌inner函数,最后返回inner函数,可是,这个函数怎么用呢?
你肯定已经看出来warpper函数参数是一个函数,在inner函数内部进行调用
所以,我们可以这样用:

warpper(test1) 

但是这样肯定不行的,返回值是一个函数的引用,所以需要用一个变量名来存储,然后加上小括号调用

func = warpper(test1)
func()
 # -------------output( hello world \n hello decorator )

这就完成了函数的装饰, 但是调用方法改变了,原来的test1改成了func(),所以做以下修改:

func() = warpper  # 改成  test1 = warpper(test1)
func()    #  改成test1()

已经完成了99%了,最后用python提供的语法糖就行了

类似于这样 – @function_name

# 第一过程最终代码展示
def warpper(func):
    def inner():
        print('hello world')
        func()
    return inner

@warpper
def test():
    print('hello decorator ')
test()

引用好文,见链接
https://www.cnblogs.com/jedenzhan/p/8683476.html


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值