python闭包实例:使用通用装饰器添加日志功能

'''
闭包的特殊用途:
可以在不修改现有功能源码的前提下,增加新的功能
日志功能(统计访问事件,访问功能,写到日志文件中),权限验证(下载之前,验证当前账户是否为会员)
'''

import time


def write_log(func):  # 定义一个记录日志的函数:将访问事件以及访问的函数名写入到文件中(log.txt)
    try:
        file = open('log.txt', 'a', encoding='utf-8')
        file.write(func.__name__)  # 写入函数名
        file.write('\t')
        file.write(time.asctime())  # 写入时间
        # time.asctime([t])转换由 gmtime()或localtime()所返回的表示时间的元组或struct_time为以下形式的字符串:
        # ‘Sun Jun 20 23:21:05 1993’。
        # 如果未提供t,则会使用localtime()所返回的当前时间。
        file.write('\n')
    except Exception as e:
        print(e)
    finally:
        file.close()


def func_out(func):  # 定义闭包函数。外部函数变量为func
    def func_in(*args, **kwargs):  # 内部函数中调用写入日志的函数。使用带*的可变参数,灵活传递参数。”args”是个元组,’kwargs’是个字典
        # 新增日志功能
        write_log(func)  # 调用外部函数的变量
        func(*args, **kwargs)
    return func_in  # 返回内部函数名,注意无括号。有括号表示返回值,无括号表示函数


@ func_out
def func1():
    print('功能1,无参数')


@ func_out
def func2(a):
    print(f'功能2,有一个参数:{a}')


@ func_out
def func3(a, b):
    print(f'功能3,有两个参数:{a}和{b}')


func1()
func2('李焕英')
func3('晴明', '博雅')



在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值