标签:stop 完成 family 数据 val 生成 iter 一个 yield
1、 生成器
生成器分为2种形式:
[x * x for x in range(10)] 列表表达式,通过它得到一个列表 (x * x for x in range(10)) 生成器表达式 通过它得到一个生成器
#_*_coding:utf-8_*_ __author__ = ‘Alex Li‘ import time def consumer(name): print("%s 准备吃包子啦!" %name) while True: baozi = yield #yield 接受send方法传递的值 print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name): c = consumer(‘A‘) c2 = consumer(‘B‘) c.__next__() c2.__next__() print("老子开始准备做包子啦!") for i in range(10): time.sleep(1) print("做了2个包子!") c.send(i) #send方法发送的数据可以被yield接受 c2.send(i) producer("px")
2、迭代器
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator,全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成
Iterator对象表示的是一个数据流,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过
next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算
迭代器是一次性消耗品,使用完了以后就空了
标签:stop 完成 family 数据 val 生成 iter 一个 yield
原文地址:http://www.cnblogs.com/pengxuann/p/6213356.html