装饰器
Posted whylinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。
1 # 装饰器 在python中占有举足轻重的位置 2 3 4 # 装饰器形成的过程 5 # 装饰器的作用 6 # 原则:开放封闭原则 7 # 开放 8 # 对扩展是开放的,新增功能是可以的 9 # 封闭 10 # 对修改是封闭的,就是发布后版本的版本的代码,就会封版,如python 的open,版本不同不能去改。 11 # 所以不能轻易的修改已经写好的代码,如果要修改,可以使用装饰器,装饰器就是解决这个的。 12 # 如果直接改原先的函数,那叫做重构 13 # 装饰器的固定模式 14 15 16 import time # 导入时间模块 17 #time.time() # 得到当前时间戳,从1970年1月1日到现在的秒数 18 #time.sleep(5) # 睡5秒 19 20 21 # 测试函数执行时间的例子, 22 # def timmer(f): 23 # starttime = time.time() 24 # f() 25 # endtime = time.time() 26 # print(endtime - starttime) 27 # 28 # def func(): 29 # #starttime = time.time() 30 # print(‘老板好同事好大家好‘) 31 # #endtime = time.time() 32 # #print(endtime - starttime) 33 # 34 # timmer(func) 35 36 # --------------------------------------# 37 def func(): 38 #starttime = time.time() 39 print(‘老板好同事好大家好‘) 40 #endtime = time.time() 41 #print(endtime - starttime) 42 43 def timmer(f): # timmer是装饰器函数,f就是被装饰的函数 44 def inner(): 45 starttime = time.time() 46 f() 47 endtime = time.time() 48 print(endtime - starttime) 49 return inner 50 51 func = timmer(func) # 得到inner闭包函数地址,同事timmer的形参f会始终保存func函数的地址 52 func() # 调用了闭包函数inner 53 54 # 上面程序的流程意思:为了测试已经写好的函数的执行时间,func()函数就是之前写好的函数,现在要测试这个func函数执行时间,但不能改动func, 55 # 所以定义了一个timmer函数,函数体中定义了一个inner闭包函数(因为使用了timmer的形参f) 56 # 函数体中调用了timmer的形参f,f()前后加上了记录开始时间与结束时间,并在后面打印 57 # 使用时,func = timer(func),timer先被调用,形参是func函数名,将闭包函数inner地址返回,赋值给了func,由于闭包的特性 58 # timmer的形参f内存值是刚才传进去的func地址,不会消失。所以在调用func时,是调用了 59 # inner闭包函数,闭包函数体重的f是func函数。 60 61 # 装饰器的作用:不想修改函数的调用方式,但是还想再原来的函数前后添加功能 62 # timmer就是一个装饰器函数,装饰了func函数,只是对一个函数 有一些装饰的作用
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章