zoukankan      html  css  js  c++  java
  • 装饰器的使用

     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('	')
    13         file.write('时间:')
    14         file.write(time.asctime())
    15         file.write('
    ')
    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
    正是江南好风景
  • 相关阅读:
    虔诚的墓主人:组合数+数据结构
    DZY Loves Math II:多重背包dp+组合数学
    集合计数 :容斥原理
    「一本通 6.6 练习 8」礼物
    [bzoj3529][Sdoi2014]数表
    [专题总结]AC自动机
    6/14考试总结
    [无用]LNC李纳川的日常NC操作
    Linux下基本操作
    [ bzoj2820] YY的GCD
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12901632.html
Copyright © 2011-2022 走看看