defdeco1(func1):# func1 = wrapper2defwrapper1(*args,**kwargs):print('from wrapper1')
res1 = func1(*args,**kwargs)print('end wrapper1')return res1
return wrapper1
defdeco2(func2):# func2=wrapper3defwrapper2(*args,**kwargs):print('from wrapper2')
res2 = func2(*args,**kwargs)print('end wrapper2')return res2
return wrapper2
defdeco3(func3):# func3=真正的indexdefwrapper3(*args,**kwargs):print('from wrapper3')
res3 = func3(*args,**kwargs)print('end wrapper3')return res3
return wrapper3
@deco1# index = deco1(wrapper2) index是deco1@deco2# wrapper2 = deco2(wrapper3)@deco3# wrapper3 = deco3(真正的index)defindex():print('from index')
index()# 结论:# 多层装饰器的调用顺序:wapper1>>>wrapper2>>>wrapper3>>>index 然后再从wrapper3,wrapper2,wrapper1依次结束# 最终的打印顺序:from wrapper1 from wrapper2 from wrapper3 from index end wrapper3 end wrapper2 end wrapper1
知识点2 有参装饰器
# 作用:仅仅是用来传参的defouter(mode):# 有参装饰器defauth(func):defwrapper(*args,**kwargs):
name =input('name').strip()
pwd =input('pwd').strip()if mode =='txt':print('文本验证')if name =='jason'and pwd =='123':
res = func(*args,**kwargs)return res
else:print('登录失败')if mode =='mysql':print('mysql验证')if name =='jason'and pwd =='123':
res = func(*args,**kwargs)return res
else:print('登录失败')else:print('其他验证方式')return wrapper
return auth
@outer('txt')defindex():print('成功')
index()
知识点3 递归函数
"""
函数的递归调用;函数嵌套调用的一种特殊形式
具体指的是:在调用一个函数的过程中,直接或间接地调用自己,称之为函数地递归调用
其实就是一个循环的过程
"""deff1():print('f1')
f1()
f1()# 查看递归调用层级的方法import sys
print(sys.getrecursionlimit())# 设置递归调用层级的方法(最好别修改)
sys.setrecursionlimit()# 函数的递归调用有两个阶段:回溯,递推defage(n):if n ==1:return18else:return age(n -1)+10
res = age(5)print(res)# 练习1
l1 =[1,[2,[3,[4,[5,[6]]]]]]deffunc(nums):for i in nums:iftype(i)islist:
func(i)else:print(i)
func(l1)