python装饰器@详解

Python函数修饰符@的作用是为现有的函数增加额外的功能;其作用非常强大,今天我们就来谈谈它是如何在日志记录中起到很好的作用的。
先看一个例子:

import datetime

__DEBUG__ = True

def log(func):
    if __DEBUG__:
        print('函数开始于',datetime.datetime.now())
        
    func()
    
    if __DEBUG__:
        print('函数结束于',datetime.datetime.now())

def test():
    
    print('test')
    test_lst = []
    for i in range(100):
        test_lst.append(i)

log(test)

log() 是一个日志函数,用于记录函数运行的开始时间,和结束时间。
可是这段代码有个弊端,在测试某个函数时,我们需要添加类似于log(test)这样的代码,不需要后把它删除;这样做很麻烦。
还好我们有@函数装饰符。修改前文中的代码,移除 log(text).
在test函数的上方加入@log装饰器。

@log
def test():
    pass

这段代码和前文中的代码功能是一样的。
可是问题又来了;运行上述代码,发现我们没有调用 test 函数,test就已经被执行了,因为 @log 等于 log(test),有什么方法让它只有在我们调用的时候运行呢?修改代码:

import datetime

__DEBUG__ = True

def log(func):
    def wrapper():
        if __DEBUG__:
            print('函数开始于',datetime.datetime.now())
        
        func()
    
        if __DEBUG__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值