装饰器
装饰器:
器:函数;
类:用来装饰函数的东西;
装饰器应用场景:如果你想在执行函数之前做什么或者执行函数之后做什么,建议使用装饰器。
def add_info(fun): # fun = saveMoney
def wrapper():
print("六一......")
print("欢迎ICBC银行ATM........")
fun() # saveMoney()
return wrapper
# python的语法糖
@add_info # saveMoney= add_info(saveMoney)
def saveMoney():
print("存钱.......")
saveMoney()
六一......
欢迎ICBC银行ATM........
存钱.......
装饰器模板
def add_info(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
# 函数执行之前做的操作
res = fun(*args, **kwargs)
# 函数执行之前做的操作
return res
return wrapper
需求:编写一个装饰器timeit,用来装饰某函数执行时间的装饰器;
import time
import functools
# 需求: 编写一装饰器timeit, 用来装饰某函数执行时间的装饰器;
def timeit(fun): # fun = world
# 2. 注意: functools.wraps(fun): 可以保留add, world等函数的函数名, 帮助文档等属性信息;
@functools.wraps(fun)
def wrapper(*args, **kwargs): # kwargs = {'a':1, 'b':2}
"""
this is wrapper function。。。。
:param args:
:param kwargs:
:return:
"""
start_time = time.time()
temp = fun(*args, **kwargs) # world(a=1, b=2)
end_time = time.time()
print("%s函数运行时间为%s" % (fun.__name__, end_time - start_time))
return temp
return wrapper
@timeit # hello = timeit(hello) # hello = wrapper
def hello():
time.sleep(0.04)
print("hello")
@timeit # add = timeit(add) # add = wrapper
def add(x,y):
"""
add(x:int, y:int)->int:
:param x:
:param y:
:return:
"""
time.sleep(0.04)
return x+y
# hello() # wrapper()
print(add(1,3))
print(add.__name__)
print(add.__doc__)
@timeit # world = timeit(world) # world = wrapper
def world(**kwargs):
"""this is **kwargs test"""
time.sleep(0.04)
return kwargs
print(world(a=1, b=2))
print(world.__name__)
print(world.__doc__)
add函数运行时间为0.046911001205444336
4
add
add(x:int, y:int)->int:
:param x:
:param y:
:return:
world函数运行时间为0.046849727630615234
{'a': 1, 'b': 2}
world
this is **kwargs test