python:
生成器:
因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用.
生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(generator)来计算一下个元素
>>> l = [x * x for x in range(5)]
>>> l
[0, 1, 4, 9, 16]
>>> g =(x*x for x in range(5))
>>> g
<generator object <genexpr> at 0x02F372D0>
>>> g.__next__()
0
>>> g.__next__()
1
>>> g.__next__()
4
>>> g.__next__()
9
定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器
1:( for 循环函数): 这里是括号
2:yield
yield指令,允许停止函数并立即返回结果,函数保存其执行上下文,如果需要,可通过__next__()方法立即继续执行。返回一个迭代器,函数send(arg)继续刚刚中断的yield并发送给yield函数一个参数
import time
def consumer(name):
print("%s准备吃包子啦" %(name))
while True:
baozi = yield
print("包子来了[%s],被[%s]吃了!"%(baozi,name))
def producer(name):
c1 = consumer('l')
c2 = consumer('z')
c1.__next__()
c2.__next__()
print('%s要开始做包子啦'%(name))
for i in range(1,10):
time.sleep(1)
print('做了两个包子')
c1.send(i)
c2.send(i)
producer('ly')
生成器不但可以作用于for
循环,还可以被next()
函数不断调用并返回下一个值,直到最后抛出StopIteration
错误表示无法继续返回下一个值了
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。