===================装饰器=
def func(arg):def inner():print('before')v = arg()print('after')return v return inner def index():print('123')return '666'# 示例一
"""
v1 = index() # 执行index函数,打印123并返回666赋值给v1.
"""
# 示例二
"""
v2 = func(index) # v2是inner函数,arg=index函数
index = 666
v3 = v2()
"""
# 示例三
"""
v4 = func(index)
index = v4 # index ==> inner
index()
"""# 示例四
index = func(index)
index()
装饰器
def func(arg):def inner():v = arg()return v return inner # 第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
# 第二步:将func的返回值重新赋值给下面的函数名。 index = func(index)
@func
def index():print(123)return 666print(index)
装饰器:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能。
应用:
# 计算函数执行时间def wrapper(func):def inner():start_time = time.time()v = func()end_time = time.time()print(end_time-start_time)return vreturn inner@wrapper
def func1():time.sleep(2)print(123)
@wrapper
def func2():time.sleep(1)print(123)def func3():time.sleep(1.5)print(123)func1()
重点–总结
目的:
在不改变原函数的基础上,再函数执行前后自定义功能。