生成器初探
Posted monster7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器初探相关的知识,希望对你有一定的参考价值。
什么是生成器:
生产器函数:
def test(): yield 1 #yield相当于return 但是可以return多次 yield 2 yield 3 g=test() print(\'来自函数\',g) print(g.__next__()) print(g.__next__())
import time
def test():
print(\'开始生孩子啦。。。。。。\')
print(\'开始生孩子啦。。。。。。\')
print(\'开始生孩子啦。。。。。。\') #每次yield上面的代码块都是属于这个yield 执行下一次的yield只是从后面开始执行 而不是再次执行上次yield的代码块
如果yield全部执行完了再回到循环
yield \'我\' #return #生成器函数的好处 比如餐厅卖包子的里子 一个一个的做 来一个做一个 比较有效率 而不是一次来一堆包子
time.sleep(3)
print(\'开始生儿子啦\')
yield \'儿子\'
time.sleep(3)
print(\'开始生孙子啦\')
yield \'孙子\'
def product_baozi():
ret=[]
for i in range(100):
ret.append(\'一屉包子%s\' %i) #效率太低了 占空间
return ret
baozi_list=product_baozi()
print(baozi_list)
def product_baozi():
for i in range(100):
print(\'正在生产包子\')
yield \'一屉包子%s\' %i #i=1 #要多少给多少 不会多做
print(\'开始卖包子\')
pro_g=product_baozi()
baozi1=pro_g.__next__()
#三元表达式
name=\'alex\' res = \'SB\' if name == \'alex\' else \'帅哥\' #意思就是如果nam是alex返回的就是SB,如果不过则返回帅哥,三元就是if 以及如果ture返回的 以及如果false返回的值
print(res)
#列表解析是第一个代码块,坏处就是占内存
egg_list=[]
for i in range(10): #一般操作
egg_list.append(\'鸡蛋%s\' %i)
print(egg_list)
l=[\'鸡蛋%s\' %i for i in range(10)] #也可以两元
l1=[\'鸡蛋%s\' %i for i in range(10) if i > 5 ] #这就是一个三元表达式
l1=[\'鸡蛋%s\' %i for i in range(10) if i > 5 else i] #没有四元表达式
l2=[\'鸡蛋%s\' %i for i in range(10) if i < 5] #不能加else但是可以改条件
#如果不要鸡蛋而是要老母鸡自己生鸡蛋
laomuji=(\'鸡蛋%s\' %i for i in range(10)) #生成器表达式,就是把上边的列表解析的中括号改成小括号
print(laomuji)
print(laomuji.__next__())
print(next(laomuji))
for jidan in alex_lmj: #可以将生成器进行for循环得到所有的值 类似取出所有的包子
print(jidan)
l=[1,2,3,34]
map(func,l)
print(sum(l))
print(sum())
print(sum(i for i in range(10000000000000))) #sum里面就是一个生成器 sum是内置函数自己运行迭代
以上是关于生成器初探的主要内容,如果未能解决你的问题,请参考以下文章