# 装饰器的作用:在不修改原有函数代码的情况下,给函数增加新的功能
# 下面结合代码实例刨析装饰器的运行逻辑
def func_out(func): # 3、执行func_out(test),此时func=test
print('Hello', end=' ') # 4、打印Hello
def func_in():
print('Decorate', end=' ') # 7、打印Decorate
func() # 8、执行data(),此时func=test,so,执行func()即执行test()
return func_in # 5、执行return,此时步骤2中的test=func_in
@func_out # 2、执行装饰器@func_out,此时相当于执行:test = func_out(test) -->此为装饰器执行的固定语法
def test(): # 6、执行test(),而此时test=func_in,so,执行test()即执行func_in()
print('!') # 9、打印!
test() # 1、实例化
>>>Hello Decorate !
# 下面结合一个需求,帮助我们更好的理解装饰器的作用
# 需求:给出了一个函数,功能是计算出任意多个数字的和:calculate(*args),请计算出此函数的运行时间。
# 设计:使用装饰器实现计算函数运行时间的功能
import time
def run_time(calc):
def run_time_in(*args): # #
start = time.time()
calc(*args) # #
end = time.time()
runtime = end - start
print('calculate函数运行时间为:%f' % runtime)
return run_time_in
@run_time
def calculate(*args):
sum = 0
for i in range(len(args)):
sum += args[i]
print(sum)
calculate(10, 3, 5, 5)
>>>23
>>>calculate函数运行时间为:*******