Discuss / Python / 小结最后一题

小结最后一题

Topic source
def log(arg):
    def decorator(fn):
        @functools.wraps(fn)
        def wrapper(*args, **kw):
            return fn(*args, **kw)
        return wrapper
    if callable(arg):
        return decorator(arg)
    return decorator

当传入文本时,装饰后执行log('arg')(fn),当没有传入值时,执行log(fn),所以判断第一次传入的参数即arg是不是函数来执行后续操作,用callable函数判断,当arg为函数时说明没有传入参数,直接返回包装函数wapper即return decorator(arg),注意此时的arg和fn指向同一个函数。另一种情况为有输入,则按原始步骤返回decorator即可


  • 1

Reply