Python学习笔记----装饰器
来源:互联网 发布:化工公司工艺软件 编辑:程序博客网 时间:2024/06/05 03:59
现在有一个函数,其有一个功能:
def myfun(): print("myfunc start") time.sleep(1) print("myfunc end")
比如,myfun是一个很常用的函数,但是,每次使用时,需要对该函数进行一个扩展使用,一般可以如下:
def deco(fun): startT = time.time() fun() endT = time.time() msecs = (endT - startT) * 1000 print("it's %f ms" % msecs)
deco函数中,传入一个函数,就可以计算出该函数执行的时间。也即对fun函数进行了扩展,称为装饰器。
但是,我们可以发现,传入的fun函数本身没有受到影响,即该装饰不是长久的,所以,进行一下改造
import timedef deco(fun): def warpper(): startT = time.time() fun() endT = time.time() msecs = (endT - startT) * 1000 print("it's %f ms" % msecs) return warpperdef myfun(): print("myfunc start") time.sleep(1) print("myfunc end")myfun()print("*"*20)myfun=deco(myfun)myfun()
此时,myfun()再进行单独调用的时候,就可以直接打印出该函数的执行时间了,为了简化其中的
myfun=deco(myfun)操作,我们此时可以更加简化为:
import timedef deco(fun): def warpper(): startT = time.time() fun() endT = time.time() msecs = (endT - startT) * 1000 print("it's %f ms" % msecs) return warpper@decodef myfun(): print("myfunc start") time.sleep(1) print("myfunc end")myfun()print("*"*20)# myfun=deco(myfun)myfun()
利用@符号来进行标记。这样,myfun函数从一个简单的sleep操作,变成了可以打印出其执行时间的函数。如果还需要对其进行其他的装饰,可以写个装饰函数,实现功能的扩展。例如
import timedef deco(fun): def warpper(): startT = time.time() fun() endT = time.time() msecs = (endT - startT) * 1000 print("it's %f ms" % msecs) return warpperdef deco2(fun): def warpper(): fun() print("deco 2") return warpper@deco2@decodef myfun(): print("myfunc start") time.sleep(1) print("myfunc end")myfun()print("*"*20)# myfun=deco(myfun)myfun()
打印结果为:
myfunc startmyfunc endit's 1000.057459 msdeco 2********************myfunc startmyfunc endit's 1000.056982 msdeco 2
装饰的嵌套,还是很强大的功能吧。
ps:编辑器用pycharm的社区版,免费的,习惯的AndroidStudio,所以倾向于Jetbrain的产品。
阅读全文
0 0
- Python装饰器学习笔记
- Python学习笔记:装饰器
- python装饰器学习笔记
- Python学习笔记--装饰器
- Python装饰器学习笔记
- Python学习笔记-装饰器
- Python 装饰器 学习笔记
- "Python"学习笔记----装饰器
- 【Python学习笔记】装饰器
- python学习笔记-装饰器
- python装饰器学习笔记
- python装饰器学习笔记
- Python学习笔记----装饰器
- 【python学习笔记】Python装饰器
- Python 学习笔记之装饰器
- Python学习笔记 装饰器详解
- python装饰器的学习笔记三
- python装饰器的学习笔记二
- 清澄A1028. 选择计算
- Python(1) ———— while循环
- js小白普及(二) 对下拉框的操作
- 12月6日 数据结构 周三
- jQuery AJAX
- Python学习笔记----装饰器
- Java中的正则表达式
- Java服务端推送和web端推送——GoEasy免费推送服务
- threadlocal原理及常用应用场景2
- LOJ6002 「网络流 24 题
- react踩坑不完全指北(1)
- Python,列表
- 递归再理解
- sublime text3安装以及插件配置教程