----------------------------------------------**## 生成器推导式**----------------------------------------------defmy_enum(list_number):# index=0# for i in list_number:# yield index,i# index+=1for i inrange(len(list_number)):yield i,list_number[i]#生成器返回结果list=[1,23,23,4,5,34,5,6,56,34]for i,r in my_enum(list):print(i,r)#将两个列表元素合并
list01=['宋悟空','猪八戒','啥僧','唐三奘']#合并,形成新元祖
list02=[1,2,3,4,5]for item inzip(list01,list02):print(item)defmy_zip(list01,list02):for item inrange(len(list01)):yield(list01[item],list02[item])for i in my_zip(list01,list02):print(i)defmy_zip1(*args):#将星号元祖args第一个参数的长度生成索引len(args[0])for i inrange(len(args[0])):list=[]for item in args:list.append(item[i])yieldtuple(list)for item in my_zip1(list01,list02):print(item)
list03=[1,'a',True,False,18.3,6,18,'b']deffind01():for item in list03:iftype(item)==int:#找出整数yield item
for i in find01():print(i)
re1=(item for item in list03 iftype(item)==int)#生成器推导式for i in re1:print(i)
re=[item for item in list03 iftype(item)==int]#liebiao推导式for i in re:print(i)
总结:1.yield 生成器,大致意思是将结果放到next方法里边了,必须用next方法才可以得到结果,for内部具有next方法,因此可以使用for遍历得到结果,yield 每次只拿出拿出一个结果,for/next方法将可以拿出全部结果;2.re1=(item for item in list03 iftype(item)==int)#生成器推导式for i in re1:print(i)
re=[item for item in list03 iftype(item)==int]#列表推导式for i in re:print(i)
区别生成器找到一个返回一个,列表推导式全部找到才返回 ,生成器更适应大数据时代,更节省空间
```
```python
-----------------------------------------**函数式编程**-----------------------------------------------------###做三个函数,将函数做为参数传入函数并可以执行这个作为参数的函数deffun01():print('fun01执行喽')deffun02():print('fun02执行喽')deffun03(func):print('fun03执行喽')
func()#将函数赋值给变量
re1=fun01
re1()#用变量调用函数
fun03(fun01)#将函数传入
fun03(fun02)
fun03(fun01)list=[1,23,2,32,32,3,4,354,435,56,67,57]#在列表中查找所有偶数#在列表中查找所有大于10数#在列表中查找所有范围在10---50之间的数deffund01(item):return item %2==0deffund02(item):return item>10deffund03(item):return10<item<50deffind(func):for item inlist:if func(item):yield item
for i in find(fund02):print(i)from Lister_hper.lister_hlper import*#调用模块from exercise02 import*#调用模块deffound04(item):return item.name=='葵花宝典'deffound05(item):return item.tm>0deffound06(item):return item.name=='葵花宝典'
result=Lister_hpler.find(list_skill,lambda item:(item.name)=='葵花宝典')for i in result:print(i)lambda 解决了函数式编程中"封装"麻烦问题.
基于微软Ling框架下的函数式编程----------------------------------------------**## 生成器推导式**----------------------------------------------def my_enum(list_number): # index=0 # for i in list_number: # ...