带参数装饰器
多个装饰器修饰一个函数
递归
带参数的装饰器
# 判断argv,当登录不同的网页,会有不同的装饰效果
def auth(argv):
def warpper(func):
def inner():
if argv == '博客园':
func()
elif argv == '码云':
func()
return inner
return warpper
@auth('博客园')
def home_page0():
print('欢迎来到博客园主页')
@auth('码云')
def home_page1():
print('欢迎来到码云主页')
home_page0()
home_page1(
多个装饰器修饰一个函数
# 多个函数装饰一个函数时,先执行离被装饰函数最近的装饰器
def auth(func): # wrapper1装饰器里的 inner
def inner(*args,**kwargs):
print("额外增加了一道 锅包肉")
func(*args,**kwargs)
print("锅包肉 38元")
return inner
def wrapper1(func): # warpper2装饰器里的 inner
def inner(*args,**kwargs):
print("额外增加了一道 日魔刺生")
func(*args,**kwargs)
print("日魔刺生 白吃")
return inner
def wrapper2(func): # 被装饰的函数foo
def inner(*args,**kwargs):
print("额外增加了一道 麻辣三哥")
func(*args,**kwargs)
print("难以下嘴")
return inner
@auth # 1 7
@wrapper1 # 2 6
@wrapper2 # 3 5
def foo(): # 4
print("这是一个元宝虾饭店")
foo()
递归
递归
1.不断调用自己本身
2.有明确的终止条件
递归的最大深度,官方说明是1000,实际测试是994/997/998
# 循环一个列表,打印出每一个元素
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn",[4,5,6,[7,[11,12,34,5],10,8,9]]]
def func(lst):
for i in lst:
if type(i) == list:
func(i)
else:
print(i)
func(li)