# 1.叠加多个装饰器的加载和执行过程
# def deco1(func1):
# def wrapper1(*args,**kwargs):
# print('this is deco1.wrapper1')
# res1 = func1(*args,**kwargs)
# return res1
# return wrapper1
# def deco2(func2):
# def wrapper2(*args,**kwargs):
# print('this is deco2.wrapper2')
# res2 = func2(*args,**kwargs)
# return res2
# return wrapper2
#
# def deco3(db_type):
# def outter3(func3):
# def wrapper3(*args,**kwargs):
# db_type
# print('this is deco3.outter3.wrapper3')
# res3 = func3(*args,**kwargs)
# return res3
# return wrapper3
# return outter3
#
# @deco1
# @deco2
# @deco3('file')
# def index(x,y):
# print(x,y)
# 2.生成器的高级玩法之yield挂起函数
# def dog(name):
# i = 0
# print('dog %s is aready to eat '%name)
# while True:
# if i<3:
#
# x = yield
# print('dog %s eat %s'%(name,x))
# i+=1
# else:return
#
# g = dog('alex')
# g.__next__()
# g.send('包子')
# g.send('包子')
# g.send('包子')
# 3.三元表达式
# 定义一个函数判断输入两个值的最大值
# def big(x,y):
# res = x if x>y else y
# print(res)
# big(10,2)
# 4.生成式
# 统计文件大小---生成式
# def file_size(file_name):
# with open(file_name,'rt',encoding='utf-8') as f:
# res = sum(len(line) for line in f) # 生成器生成式
# print(res)
# file_size('笔记.txt')
# l = ['egon_dsb','alex_dsb','lxx_dsb'] # 列表生成式
# new_l = [i.rstrip('_dsb') for i in l]
# new_l = [ i.split('_')[0] for i in l]
# print(new_l)
# l = {'name':'alex','age':'18','gender':'male'}
# dic = {k:v for k,v in l.items() if k != 'gender'} # 字典生成式
# print(dic)
# 5.函数的递归调用
# 递归调用就是在函数体代码执行时直接或间接的调用直接
# 打印多层列表里的值
# l = [1,2,[3,4,[5,6,[7,[8,[9]]]]]]
# def func(l):
# for i in l:
# if i.__class__ is not list:
# print(i)
# else:func(i)
# func(l)
# 函数的递归之 回溯 和 递推
# 函数一层一层的往下推叫回溯 ,从上一层一层的往回推叫递推
# yield表达式
# def func():
# print(1)
# yield 1111
# print(2)
# yield 2222
# print(3)
# yield 3333
# print(4)
# g = func()
# print(g.__next__())
# print(g.__next__())