Python3装饰器解析

实现装饰器知识储备:
1.函数即"变量" (白话:函数实参 当作另一个函数的形参)
2.高阶函数
a:把一个函数名当作实参传给另一个函数(
在不修改被装饰函数源代码的情况下为其添加功能)
b:返回值中包涵函数名(说白了,此函数名是嵌套函数名)(不修改函数的调用方式)
3.嵌套函数
《高阶函数+嵌套函数》=装饰器

》》》代码详解
import time
def bar():
    time.sleep(3)
    print("I am bar")

def deco(fun):
    def test1():#呵呵 debug这步 没什么卵用,就是声明了一个函数,没调用。其实此刻它就是地址即变量,切记,别想着到到这步的执行过程,切记,只是申明。
        start_time=time.time()
        fun()
        end_time=time.time()
        print("用时:%s"%(end_time-start_time))
    return  test1


# 这一步关键,上面两个函数都在申明,没有调用,没卵用,
#此时bar是接受 deco(bar)的返回值 test1,test1是个地址即变量,加上括号,就是调用,
#变量可以赋值,赋值给bar的 加上括号 就是调用。test()=bar()
bar=deco(bar)
bar() #-->实际这是在调用tes1()

'''
综上 以后在装饰器 满足原则的条件下,实际在运行嵌套函数,由高级函数的返回值加括号运行,
即把嵌套函数的函数名作为高级函数的返回值,返回值()=嵌套函数名(),
又因返回值是个变量,变量可以赋值,赋值给被装饰函数名()
其满足装饰器其二原则,不改变被装饰函数的调用方式
'''

  



posted on 2019-05-25 16:03  墨离子  阅读(143)  评论(0编辑  收藏  举报