装饰器

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函数,只是对一个函数 有一些装饰的作用
View Code

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码