多个装饰器装饰一个函数

# !/usr/bin/env python
# -*- coding:utf-8 -*-

def wrapper1(func1):  # func1 == func原函数
    def inner1(*args, **kwargs):
        print('wrapper1, before func')
        ret1 = func1(*args, **kwargs)
        print('wrapper1, after func')
        return ret1
    return inner1


def wrapper2(func2):  # func2 = inner1
    def inner2(*args, **kwargs):
        print('wrapper2, before func')
        ret2 = func2(*args, **kwargs)
        print('wrapper2, after func')
        return ret2
    return inner2


@wrapper2     # 第二步: func = wrapper2(func), 执行装饰器之前根据第一步func==inner1, 执行装饰器wrapper2之后,func2==inner1,左边的func==inner2
@wrapper1     # 第一步: func = wrapper1(func), 执行装饰器wrapper1,则func1 == func, 左边的 func==inner1
def func():
    print("Hello World!")


func()    #  第三步: func() == inner2() ,然后根据调用依次执行函数 , (根据第二步:func==inner2)


执行顺序如图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值