python学习小记录一(装饰器)

今天学习python发现了一个很屌的知识点叫什么装饰器。这玩意很屌啊,很像Java里面的注解框架功能,但是感觉又比注解好理解一些,我感觉最适合用来打日志了。咩哈哈哈。来来来,看代码。

# -*- coding: utf-8 -*-
# code by xiaonan
import datetime
import time
import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args,**kwargs):
        print("method call start")
        func(*args,**kwargs)
        stop_time = datetime.datetime.now()
        print("method call stop")
        return None
    return wrapper

@log
def now():
    print("This is method")

if __name__=="__main__":
    now()

在log函数里面,你可以打很多的日志,包括参数什么的,执行时间啥的都打出来。然后你只需要在想要打日志的函数前面华丽的写上@log,在执行这个函数的时候,log也就可以输出了。这玩意真的很神奇啊。当打上@log标签的函数执行的时候,会先去执行wrapper函数,感觉像是hock或者反射之类的功能,这里引用一下廖雪峰老师的原

由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数。

这里就学会了这个不明觉厉的功能。以后会自己封装喜欢的log风格,哪怕打印一个火车都行,只要在喜欢的地方!!哈哈哈,开森


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StrangeNightmare/article/details/79978400
个人分类: python学习小记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭