美文网首页
装饰器没有那么难!(二)

装饰器没有那么难!(二)

作者: 江山画_孤影 | 来源:发表于2018-04-23 14:46 被阅读0次

现在取一些网络教程中的例子来看看,是不是感觉很清新了呢。

被封装的函数不带参数

装饰器的功能用于计算my_function函数的运行时间
由于my_function前面用了装饰器,
所以print(my_function())
这里的my_function不再是原来的那个函数
而是装饰器里的内部函数wrapper
如果你理解my_function实质上是wrapper函数(核心),
一切都是如此简单

被封装的函数带有参数

QQ截图20180423104554.png 运行逻辑,看懂红框中的两个关键点就可以了

新内容

1. 保留原函数的属性

被封装的函数,已经不再是原来的函数(说了无数遍了!!!你再理解不了,宝宝也没辙了),
那么要如何保留原函数的属性呢?
python的functools.wraps给我们带来了解决方法
__name__函数名,__doc__注释内容
QQ截图20180423175503.png QQ截图20180423175723.png

2. 一个函数使用多个装饰器

1.原则是 “靠近装饰目标函数定义的装饰器先执行,然后依次执行上面的”(重点)
2.一个函数理论上可以使用多个装饰器,但不建议用三个甚至更多,因为太晦涩

QQ截图20180423142927.png 运行结果

运行逻辑:
程序先执行decorator2,再执行decorator1
f(3)实际上是g2(3),result2=3,打印'程序在执行2',result2*result2 = 9
g1(9),result1 = 9,打印'程序在执行1',打印9,result1+result1 = 18,打印18

QQ截图20180423143227.png

运行逻辑:
程序先执行decorator1,再执行decorator2
f(3)实际上是g1(3),result1=3,打印'程序在执行1',打印3
result1+result1 = 6,
g2(6),result2 = 6,打印'程序在执行2',result2*result2 = 36,打印36

至此装饰器的学习告一段落.

相关文章

  • 装饰器没有那么难!(二)

    现在取一些网络教程中的例子来看看,是不是感觉很清新了呢。 被封装的函数不带参数 被封装的函数带有参数 新内容 1....

  • 装饰器没有那么难!(一)

    装饰器是python面试中绕不开的话题,希望大家能重视. 装饰器的结构 被封装的函数不带参数 举个栗子 再举个栗子...

  • Python装饰器

    1. 什么是装饰器? 装饰器是一个用来装饰函数的函数。感觉有点拗口,那么,在我的理解,装饰器只是个辅助函数,有没有...

  • Python day30_闭包与装饰器

    闭包 装饰器 装饰器结论: 一个装饰器一个函数了解 二个装饰器装饰一个函数图解大法 二个装饰器装饰器一个函数内存图...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • python 装饰器(类装饰器和函数装饰器)

    一、函数装饰器示例 二、类装饰器

  • 装饰器模式

    一、装饰器模式介绍 二、装饰器模式代码实例

  • python

    Python装饰器为什么难理解? 无论项目中还是面试都离不开装饰器话题,装饰器的强大在于它能够在不修改原有业务逻辑...

  • 装饰器(二)-装饰器原理

    下面具体看下装饰器是如何发挥作用的 首先,看装饰器函数outer,该函数接收一个参数func,其实就是接收一个方法...

网友评论

      本文标题:装饰器没有那么难!(二)

      本文链接:https://www.haomeiwen.com/subject/zhuhlftx.html