• 闭包的特殊用法


     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('	')
    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
    正是江南好风景
  • 相关阅读:
    java之正则表达式
    mysql之自定义函数
    mysql之replace into与 insert into duplicat key for update
    mysql之命令行导入导出
    Echarts修改legend样式
    ubuntu出现 E: Sub-process /usr/bin/dpkg returned an error code
    ubuntu总是提是E: 不能满足依赖关系。不妨试一下 -f 选项
    ubuntu安装和查看已安装软件
    放爬虫nginx
    nginx日志切割
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12901167.html
Copyright © 2020-2023  润新知