import datetime
"""
三步走: 1、定义一个外函数,外函数有一个形参,接受被装饰的函数对象
2、定义一个内函数,内函数内调用传入函数
3、定义外函数的返回值,外函数返回值固定的格式为内置函数对象
"""
"""实现一个计时器的装饰器,计算函数执行时间"""
def timer(func):
def inner():
# 获取当前时间
start_time = datetime.datetime.now()
func()
end_time = datetime.datetime.now()
print(f"函数的执行时间{end_time - start_time}")
return inner
@timer
def hogwarts():
print("霍格沃兹测试学社")
hogwarts()
@timer
def hogwarts2():
print("霍格沃兹测试学社2")
hogwarts2()
def timer(func):
# 如果被装饰函数有参数,那么需要在内函数加形参以及在函数参数调用的时候添加参数信息
# 如果写死一个参数,但是无法确定被装饰函数的参数数量,这种写法就不行,会报错
# 解决方法:把两个地方的参数全部换成不定长参数
def inner(*args, **kwargs):
# 获取当前时间
start_time = datetime.datetime.now()
func(*args, **kwargs)
end_time = datetime.datetime.now()
print(f"函数的执行时间{end_time - start_time}")
return inner
@timer
def hogwarts(name, age):
print("霍格沃兹测试学社", name, age)
hogwarts('Tom', 4)
@timer
def hogwarts2(name, age, sex):
print("霍格沃兹测试学社2", name, age, sex)
hogwarts2('jack', 11, 'man')
评论区(暂无评论)