首页 > 其他 > 详细

装饰器的使用

时间:2020-05-16 18:43:25      阅读:44      评论:0      收藏:0      [点我收藏+]
 1 #使用装饰器 完成不修改func1() func2()函数的源码,添加输出日志信息\
 2 import time 
 3 def func1():
 4     print(功能1)
 5 def func2():
 6     print(功能2)
 7 def writelog(func):
 8     try:
 9         file = open(log.txt,a,encoding=utf-8)
10         file.write(访问:)
11         file.write(func.__name__)
12         file.write(\t)
13         file.write(时间:)
14         file.write(time.asctime())
15         file.write(\n)
16     except Exception as e:
17         print(e.args)
18     finally:
19         file.close()
20 
21 #使用闭包
22 def funcOut(func):
23     def funcIn():
24         writelog(func) #内部函数使用外部函数的变量
25         func()
26     return funcIn #外部函数返回内部函数的函数名
27 
28 #闭包的调用
29 func1 = funcOut(func1) #调用外部函数,用一个变量接收返回的内部函数名
30 """
31 分析:左边 func1 变量(可以是其他变量名)  指向参数为func1的外部函数的返回值,
32       也就是指向外部函数返回的内部函数的函数名
33       此时,左边func1 和 funcIn 均指向内部函数。
34 """
35 
36 #装饰器
37 @funcOut #相当于 func1 = funcOut(func1),由此可见,装饰简化实现闭包的功能
38 def func1(): # 将func1作为外部函数funcOut()的参数
39     print(功能1)
40 
41 @funcOut # 装饰器的作用:简化闭包的调用
42 def func2():
43     print(功能2)
44 
45 func1() #用装饰器后,func1直接调用funcOut().并直接以func1作为参数执行内部函数
46 func2()
47 
48 """
49 总结:装饰器:将其下的函数名 func1 作为外部函数的变量参数运行,内部函数又使用
50       外部函数的变量 func1 ,会执行:writelog(func1),func1()
51 """
1 功能1
2 功能2
1 访问:func1    时间:Sat May 16 17:49:21 2020
2 访问:func1    时间:Sat May 16 17:50:18 2020
3 访问:func1    时间:Sat May 16 18:05:37 2020
4 访问:func1    时间:Sat May 16 18:07:18 2020
5 访问:func2    时间:Sat May 16 18:07:18 2020
6 访问:func1    时间:Sat May 16 18:16:50 2020
7 访问:func2    时间:Sat May 16 18:16:50 2020

 

装饰器的使用

原文:https://www.cnblogs.com/monsterhy123/p/12901632.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!