实现装饰器知识储备: 1.函数即"变量" (白话:函数实参 当作另一个函数的形参) 2.高阶函数 a:把一个函数名当作实参传给另一个函数( 在不修改被装饰函数源代码的情况下为其添加功能) b:返回值中包涵函数名(说白了,此函数名是嵌套函数名)(不修改函数的调用方式) 3.嵌套函数 《高阶函数+嵌套函数》=装饰器 》》》代码详解
import timedef 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()'''综上 以后在装饰器 满足原则的条件下,实际在运行嵌套函数,由高级函数的返回值加括号运行,即把嵌套函数的函数名作为高级函数的返回值,返回值()=嵌套函数名(),又因返回值是个变量,变量可以赋值,赋值给被装饰函数名()其满足装饰器其二原则,不改变被装饰函数的调用方式'''