生成器初探

什么是生成器:

生产器函数:

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是内置函数自己运行迭代
 


posted on 2018-05-08 11:46  monster7  阅读(128)  评论(0编辑  收藏  举报

导航