简单了解python 生成器 列表推导式 生成器表达式
生成器就是自己用python代码写的迭代器,生成器的本质就是迭代器。
通过以下两种方式构建一个生成器:
1、通过生成器函数
2、生成器表达式
生成器函数:
函数
deffunc1(x): x+=1 returnx print(func1(5))
生成器函数
deffunc1(x): x+=1 yieldx g_obj=func1(5) print(g_obj.__next__())
一个next对应一个yield。
yieldVSreturn
return结束函数,给函数的执行者返回值
yield不会结束函数,一个next对应一个yield,给生成器对象。__next__()返回值。
生成器函数VS迭代器
区别1:自定制的区别:
l1=[1,2,3,4,5] l1.__iter__() deffunc1(x): x+=1 yieldx x+=3 yieldx x+=5 yieldx g1=func1(5) print(g1.__next__()) print(g1.__next__()) print(g1.__next__())
区别2:内存级别的区别。
迭代器是需要可迭代对象进行转化,可迭代对象非常占内存
生成器直接创建,不需要转化,从本质就节省内存
send&next
send与next一样,也是对生成器取值(执行一个yield)的方法。
send可以给上一个yield传值,第一次取值永远都是next
最后一个yield永远也得不到send的值
列表推导式:一行代码搞定所需要的任何列表
循环模式格式:[变量(加工后的变量)for变量ininterable
lis=[iforiinrange(1,101)] print(lis) lis=['骑士计划%s期'%iforiinrange(1,16)] print(lis)
lis=[i**2foriinrange(1,11)] print(lis) print([iforiinrange(1,31)ifi%3==0]) print([i*iforiinrange(1,31)ifi%3is0])
筛选模式:
names=[['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'], ['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']] print([qfornameinnamesforqinnameifq.count('e')>=2])
列表推导式
优点:一行解决,方便
缺点:容易着迷,不易排错,不能超过三次循环
列表推导式不能解决所有列表的问题,无需刻意使用
生成器表达式:将列表推导式的[]换成()即可
g=(iforiinrange(199)) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。