闭包的特殊用法

 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

 

posted @ 2020-05-16 16:48  小他_W  阅读(119)  评论(0编辑  收藏  举报