装饰器

装饰器

# 1. 为什么要用装饰器?
"""
在不改变原函数的基础上,对函数执行前后进行自定义操作。
"""
import functools

def wapper(func):
    @functools.wraps(func)
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner
"""
1. 执行wapper函数,并将被装饰的函数当做参数。 wapper(index)
2. 将第一步的返回值,重新赋值给  新index =  wapper(老index)
"""
@wapper
def index(a1):
    return a1 + 1000

@wapper
def order(a1):
    return a1 + 1000


print(index.__name__)
print(order.__name__)

带参数的装饰器

def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print('''执行函数之前要做的''')
            re = func(*args,**kwargs)
            if flag:
                print('''执行函数之后要做的''')
            return re
        return inner
    print('outer')
    return timer

@outer(True)
def func():
    print(111)

func()

# 1.fun=outer(True)
# 2.@fun
posted @ 2021-06-07 11:39  wuyuan2011woaini  阅读(18)  评论(0编辑  收藏  举报