首先看一个例子

 ''' 多个装饰器装饰一个函数 '''

 # 定义第一个装饰器
def set_func1(func):
def wrapper1(*args,**kwargs):
print('装饰内容开始1')
func(*args, **kwargs)
print('装饰内容结束1')
return wrapper1 # 定义第二个装饰器
def set_func2(func):
def wrapper2(*args,**kwargs):
print('装饰内容开始2')
func(*args, **kwargs)
print('装饰内容结束2')
return wrapper2 # 定义第二个装饰器
def set_func3(func):
def wrapper3(*args,**kwargs):
print('装饰内容开始3')
func(*args, **kwargs)
print('装饰内容结束3')
return wrapper3 @set_func1
@set_func2
@set_func3
def show():
print('Show Run....') show() 结果如下:
装饰内容开始1
装饰内容开始2
装饰内容开始3
Show Run....
装饰内容结束3
装饰内容结束2
装饰内容结束1 进程已结束,退出代码 0

使用简易代码分析执行流程--->实质就是几层函数的嵌套

 def wrapper1():
print("wrapper1 start") # 第1步
wrapper2() # 第2步
print("wrapper1 end") # 第10步 def wrapper2():
print("wrapper2 start") # 第3步
wrapper3() # 第4步
print("wrapper2 end") # 第9步 def wrapper3()
print("wrapper3 start") # 第5步
main_function() # 第6步
print("wrapper3 end") # 第8步 def main_func()
print("hello Python") # 第7步 main_func() # start

如果你和我有共同爱好,我们可以加个好友一起交流!

python编程系列---多个装饰器装饰一个函数的执行流程的更多相关文章

  1. python基础之 装饰器,内置函数

    1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...

  2. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

  3. Python 装饰器装饰类中的方法

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...

  4. python基础 (装饰器,内置函数)

    https://docs.python.org/zh-cn/3.7/library/functions.html 1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使 ...

  5. python装饰器1:函数装饰器详解

    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函 ...

  6. 如何用python的装饰器定义一个像C++一样的强类型函数

        Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍 ...

  7. Python - 三大器 迭代器,生层器,装饰器

    目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...

  8. Python:有参装饰器与多个装饰器装饰一个函数

    有参装饰器 def timmerout(flag1): #flag1 =flag def timmer(f): def inner(*args,**kwargs): if flag1: start_t ...

  9. Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

随机推荐

  1. 实现一个正则表达式引擎in Python(三)

    项目地址:Regex in Python 前两篇已经完成的写了一个基于NFA的正则表达式引擎了,下面要做的就是更近一步,把NFA转换为DFA,并对DFA最小化 DFA的定义 对于NFA转换为DFA的算 ...

  2. css禁止选中文字

    很简单: -moz-user-select:none;/*火狐*/ -webkit-user-select:none;/*webkit浏览器*/ -ms-user-select:none;/*IE10 ...

  3. Eureka实战-1【Eureka Server在线扩容】

    1.准备工作 PS:为了偷懒,每个pom文件都要依赖的公共依赖配置放在下面: <parent> <groupId>org.springframework.boot</gr ...

  4. php echo/print 输出函数比较

    一.两者区别 echo 支持多个字符串输出,用逗号(,)隔开,print只支持一个字符串输出 echo 输出速度比print快 echo 没有返回值,print返回值总是1   二.使用 echo e ...

  5. wordpress安装主题、插件需要FTP用户名密码

    修改主目录wordpress下的wp-config.php文件,在最结尾加上 define("FS_METHOD", "direct"); define(&qu ...

  6. java架构之路-(面试篇)JVM虚拟机面试大全

    下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存 ...

  7. 爬虫那点事,干就玩了之seleunim

    目录 selenium 环境准备 代码环境 开始爬虫 操作js 截图 切换窗口 在当前窗口切换访问地址 管理cookie # 加入战队 微信公众号 # 加入战队 微信公众号 做技术我们最重要的是[做] ...

  8. 安装sublime插件安装不上遇到的各种坑

    为了学习VUE , 发现没有高亮代码, 百度原来需要安装插件,安装过程中遇到了各种坑,记录下来避免大家踩坑, 首先用代码安装快捷键  ctrl+`   粘贴代码 import urllib.reque ...

  9. asp.net 开源工作流-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

    关键字:流程未来节点处理人  工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向.对于另 ...

  10. docker在Mac上的下载安装

    在Mac上下载安装docker,下载链接:Stable 安装成功后启动终端,检查安装后的docker版本: yanguobindeMacBook-Pro:~ yanguobin$ docker --v ...