python3 装饰器

发布时间:2019-09-27 07:09:13编辑:auto阅读(1990)

    看廖雪峰官网的python3装饰器有感
    
    装饰器即将一个函数作为变量在新的函数中调用此函数。
    
    作业:
    能否写出一个@log的decorator,使它既支持:
    @logdef f():
        pass
    又支持:
    @log('execute')def f():
        pass
        
    例1:
    import functools
    import time
    
    def log(*args,**kwargs):     # *args 是个元组
        if args and isinstance(args,tuple): #log()
            def decorator(func):
                @functools.wraps(func)
                def wrapper(*args1,**kwargs1):
                    print("1111 %s %s()" %(args[0],func.__name__))
                    #return func
                    return func(*args1,**kwargs1)
                return wrapper
            return decorator
        else:
            def decorator(func):
                @functools.wraps(func)
                def wrapper(*args1,**kwargs1):
                    print("222 %s()" % func.__name__)
                    return func(*args1,**kwargs1)
                return wrapper
            return decorator
    @log('test')
    def now1():
         print(time.time())
    now1()
    
    @log()
    def now2():
         print(time.time())
    now2()

    result:得到两个函数调用log装饰器的结果。

    1111 test now1()
    1505878800.4148097
    222 now2()
    1505878800.4148097

    网站链接:廖雪峰python3装饰器

关键字

上一篇: python3基础链接

下一篇: python3 day7