Python进阶第九篇装饰器
Posted bep_code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python进阶第九篇装饰器相关的知识,希望对你有一定的参考价值。
什么是装饰器
装饰器本身就是函数,并且为其他函数添加附加功能
装饰器的原则:1.不修改被装饰对象的源代码 2.不修改被装饰对象的调用方式
装饰器=高阶函数+函数嵌套+闭包
# res=timmer(test) #返回的是wrapper的地址 # res() #执行的是wrapper()
# test=timmer(test) #返回的是wrapper的地址 # test() #执行的是wrapper()
# @timmer 就相当于 test=timmer(test)
# #搭一个高阶函数与函数嵌套的框架 # def timmer(func): # def wrapper(): # print(func) # func() # return wrapper import time def timmer(func): def wrapper(): start_time=time.time() # print(func) res=func()#由于执行新获得的test,所以执行wrapper,func作为局部变量,当前没有,便往上一层去找,即test,运行test stop_time = time.time() print(\'运行时间是%s\' %(stop_time -start_time)) #wrapper里没有返回值,所以不管怎么改变test,返回值都是none return res#由于func运行的就是test,所以将func的值赋给res,再返回res就是test的返回值 return wrapper @timmer#相当于test = timmer(test)#把test函数作为参数传给timmer,执行timmer获取到返回值wrapper,并将其赋给test def test(): time.sleep(3) print(\'test运行完毕\') return \'这是test的返回值\' test()#执行新的test,实际就是执行wrapper,这是为了不改变test的调用方式
以上是关于Python进阶第九篇装饰器的主要内容,如果未能解决你的问题,请参考以下文章