20181003:学习python装饰器(确实有点绕)

  • 让我明白了一点点装饰器的文章:https://blog.csdn.net/z54572/article/details/61914937
  • 让我明白为什么要用装饰器的文章:https://www.jb51.net/article/99585.htm
    下面的代码是装饰器的原型。
    最后20行的新foo最终成为包裹了第4行老foo函数的wrapper的内容,只是名字还是foo,其实和第4行的老foo完全不是同一个函数,第4行的老foo被实际包裹在这个新foo里面了。
    通过这一转悠,实际达到了:不修改第4行foo函数的内容和调用方法,却增加了控制、检验或新功能的目的。虽然调用方法没变(foo()),但实际执行的新foo了,当然新foo中是包含了老foo的功能的,还增加了老foo中没有的功能。
    在这里插入图片描述
    下面是在原型的基础上用装饰器的结果,重点关注第11行的@timeit,在定义上加上这一行与上面例子中的第20行写的foo = timeit(foo)完全等价,只是用了python专有的@样式处理而已,千万不要以为@有另外的魔力。除了字符输入少了一些,没什么特别的。当然还有一个额外的好处:就是这样看上去更有装饰器的感觉。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zyself/article/details/82934510