闭包的特殊用法

 1 # 闭包的特殊用途:不修改源代码的前提下,添加新功能
 2 # 添加日志输出信息
 3 import time
 4 def writeLog(func):
 5     try:
 6         file = open('writeLog.txt','a',encoding='utf-8')
 7         # 向文件中写入日志信息(访问:文件名 时间:xxxx-xx-xx)
 8         file.write('访问:')
 9         file.write(func.__name__)
10         file.write('\t')
11         file.write('时间:')
12         file.write(time.asctime())
13     except expression as e:
14         print(e.args)
15     finally:
16         file.close()
17 
18 def func1():
19     # writeLog(func1) # 直接修改源码添加日志信息
20     print('功能1')
21 def func2(): 
22     # writeLog(func2) # 直接修改源码添加日志信息
23     print('功能2')
24 
25 # 使用闭包,不修改func1 he func2 的功能代码,添加日志信息
26 def funcOut(func):
27     def funcIn():
28         writeLog(func)
29         func()
30         print('调用',func.__name__,'结束')
31     return funcIn
32     
33 func1 = funcOut(func1) # 变量 fun1 和 funcIn 均指向内部函数funcIn()
34 func1() # 调用 fun1 所指向的函数 funcIn(),即对内部函数进行调用
35        # 调用内部函数后:输出日志信息,输出功能函数fun1
36 func2 = funcOut(func2)
37 func2() # 对内部函数进行调用
1 功能1
2 调用 func1 结束
3 功能2
4 调用 func2 结束
1 访问:fun1    时间:Sat May 16 16:20:21 2020
2 访问:fun2    时间:Sat May 16 16:20:21 2020
3 访问:fun1    时间:Sat May 16 16:29:44 2020
4 访问:func1    时间:Sat May 16 16:42:09 2020
5 访问:func1    时间:Sat May 16 16:42:28 2020
6 访问:func2    时间:Sat May 16 16:42:28 2020
7 访问:func1    时间:Sat May 16 16:43:49 2020
8 访问:func2    时间:Sat May 16 16:43:49 2020

 

上一篇:基于VSCode的C/C++编程语言的构建调试环境搭建指南


下一篇:conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义