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