#多个装饰器
def wrapper1(f):
print("enter wrapper1")
def inner1(*args,**kwargs):
print("enter inner1")
res = f(*args,**kwargs)
print("exit inner1")
return res
print("exit wrapper1")
return inner1
def wrapper2(f):
print("enter wrapper2")
def inner2(*args,**kwargs):
print("enter inner2")
res = f(*args,**kwargs)
print("exit inner2")
return res
print("exit wrapper2")
return inner2
def wrapper3(f):
print("enter wrapper3")
def inner3(*args,**kwargs):
print("enter inner3")
res = f(*args,**kwargs)
print("exit inner3")
return res
print("exit wrapper3")
return inner3
#装饰时:从距离近的装饰器开始装饰
#执行时:从距离远的装饰器内部函数开始执行
@wrapper1
@wrapper2
@wrapper3
def func(x,y):
return x+y
func(1,2)
'''
装饰器的使用场景:
1、参数,结果的检查
2、缓存
3、计数
4、日志
5、统计
6、权限管理
7、重试
'''
#retry装饰器
def retry(count=3,wait=0,exceptions=(Exception,)):
import time
def warpper(f):
def inner(*args,**kwargs):
for i in range(count):
try:
res = f(*args,**kwargs)
except exceptions as e:
time.sleep(wait)
continue
else:
return res
return inner
return warpper
import random
@retry(5)
def connetSQL(ip,port,dbName,passwd):
num = random.choice([1,2,3,4])
print("*********** ",num)
if num <= 1:
10/0
connetSQL("","","","")
python快速学习回忆版本------第七章-3
最新推荐文章于 2024-07-30 21:09:58 发布