python之装饰器的使用
常见使用场景
装饰器的常见使用场景:
- 打印日志
- 计时
场景1.打印日志
创建装饰函数
# 创建装饰函数
def logger(func):
def wrapper(*args, **kw):
print('我准备开始计算:{}函数了:'.format(func.__name__))
# 真正执行的是这行。
func(*args, **kw)
print('啊哈,我计算完啦。给自己加个鸡腿!!')
return wrapper
使用
创建业务函数,这里是计算两数之和。
创建好后,在创建方法上方用@符号进行装饰。
然后运行业务函数,查看打印信息。
@logger
def add(x, y):
print('{} + {}={'.format(x,y,x+y))
# 运行
add(2,3)
场景2.计时器
创建装饰函数
# 创建装饰函数
def timer(func):
def wrapper(*args, **kw):
t1 = time.time()
# 真正执行的是这行。
func(*args, **kw)
t2 = time.time()
# 计算时长
cost_time = t2 - t1
print("消耗时长:{}秒".format(cost_time))
return wrapper
使用
@timer
def do_sleep(sleep_time):
time.sleep(sleep_time)
# 运行
do_sleep(5)
进阶用法
1.带参数的函数装饰器
创建装饰器函数
def say_hello(contry):
def wrapper(func):
def deco(*args, **kwargs):
if contry == "china":
print("你好!")
elif contry == "america":
print('hello.')
else:
return
#真正执行函数的地方
func(*args, **kwargs)
return deco
returt wrapper
使用
@say_hello("china")
def chinese():
print("我来自中国。")
@say_hello("america")
def american():
print("I am from America.")
# 运行
chinese()
american()