装饰器

2020-04-22  本文已影响0人  huashen_9126

1.最简单的装饰器

def log(func):
    def wrapper(*args, **kw):
        print('start log')
        return func(*args, **kw)
    return wrapper

@log
def test():
    print('start test')

test()

输出:
start log
start test

2.带参数的装饰器

def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print(text + ' ' + func.__name__)
            return func(*args, **kw)
        return wrapper
    return decorator

@log('execute')
def test():
    print('start test')

test()
print(test.__name__)

输出:
execute test
start test
wrapper

3.最终版,不改变test.__name__的值

import functools

def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print(text + ' ' + func.__name__)
            return func(*args, **kw)
        return wrapper
    return decorator

@log('execute')
def test():
    print('start test')

test()
print(test.__name__)

输出:
execute test
start test
test

上一篇 下一篇

猜你喜欢

热点阅读