生成器

每当用next调用时就会消耗内存,否则不会,这样节省资源而不会让部分没使用的数据一直占着内存

def consumer(name):
    print("%s begin eat" %name )
    while True:
        baozi = yield #遇到yield时,此生成器就暂停并返回
        print("baizi [%s] come , %s eat it" %(baozi,name)) #send传值后运行剩余代码

c = consumer("xxxxx")
print(c)
c.__next__()
c.send(1) #send方法可传值给yield

#第二种创建生成器的方法
a = (i*2 for i in range(10))
print(a)

输出结果为

<generator object consumer at 0x0000000000695B48>
xxxxx begin eat
baizi [1] come , xxxxx eat it
<generator object <genexpr> at 0x0000000000695BC8></genexpr>

迭代器

能够进行for循环的对象就是可迭代对象,如list,set,dist,tuple,string,生成器

t = iter([1,2,3,4,5,6])
while True:
    try:
        x = t.__next__()
        print(x)
    except StopIteration as e:
        print("the error ")
        break

运行结果如下

1
2
3
4
5
6
the error