Discuss / Python / 作业2,3

作业2,3

Topic source
# 请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志。

def log2(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('start call %s():' % func.__name__)
        res = func(*args, **kw)
        print('end call %s():' % func.__name__)
        return res
    return wrapper

@log2
def f1():
    return '1234qwerasdf'

print(f1())

# 再思考一下能否写出一个@log的decorator,使它既支持:不带参数的,和带有参数的

def log3(test=''):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s call %s():' % (test, func.__name__))
            res = func(*args, **kw)
            return res
        return wrapper
    return decorator

@log3()
def f3():
    return 'qwerasdf'

print(f3())

  • 1

Reply