生成器
每当用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