闭包的特殊用法
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 访问:func1 时间:Sat May 16 16:20:21 2020 2 访问:func2 时间:Sat May 16 16:20:21 2020 3 访问:func1 时间: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
正是江南好风景