疑难题解析

请实现功能 : 在不改变装饰器的情况下,给装饰器的执行加上log信息。(5分)

def log(wrap):

   …

@log              

def wrapper(func):

    def inner(*args,**kwargs):

        print(‘before func‘)

        ret =  func(*args,**kwargs)

        print(‘after func‘)

        return ret

    return inner

 

@wrapper        

def wahaha(name):

    print(‘%s in wahaha‘%name)

 

wahaha(‘alex‘)

 

答:

    def log_inner(*args,**kwargs):
        inn = wrap(*args,**kwargs)
        def inner(*args,**kwargs):
            ret = inn(*args,**kwargs)
            print(wrap.__name__,‘is running‘)
            return ret

        return inner

    return log_inner


@log              
def wrapper(func):
    def inner(*args,**kwargs):
        print(‘before func‘)
        ret =  func(*args,**kwargs)
        print(‘after func‘)

        return ret

    return inner

 

@wrapper         
def wahaha(name):
    print(‘%s in wahaha‘%name)


wahaha(‘alex‘)


解析






原文地址:https://www.cnblogs.com/ellisonzhang/p/10534483.html