import time
from functools import wraps
def say_hello(name):
print("hello, %s welcome"%name)
return 123
"""
要求:
在不改变原函数的情况下,增添新的功能:计算函数的运行时间
并且保证开放封闭原则
"""
def timmer(func):
def wrapper(*args, **kwargs):
start = time.time()
time.sleep(2)
res = func(*args, **kwargs)
stop = time.time()
print(stop - start)
return res
return wrapper
res1 = say_hello("小王")
print(res1)
say_hello = timmer(say_hello)
res2 = say_hello("小李")
print(res2)
输出结果
hello, 小王 welcome
123
hello, 小李 welcome
2.000683546066284
123
使用装饰器
def timmer(func):
@wrapper(func)#将func的属性即timmer的属性完全赋给wrapper
def wraps(*args, **kwargs):
start = time.time()
time.sleep(2)
res = func(*args, **kwargs)
stop = time.time()
print(stop - start)
return res
return wrapper
@timmer #@的作用,将下方的函数名当做参数传入@后的名字,timmer(say_hello)
def say_hello(name):
print("hello, %s welcome"%name)
return 123
res = say_hello('小白')
print(res)
print("*"*50)
输出结果
hello, 小白 welcome
2.000758171081543
123
**************************************************