迭代器
- 可用于集合,列表,元组,字典,字符串
- 可以用于节省内存,用完一个数据就可以del掉
- 可循环的对象统称为:Iterable
- 可被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
- 可以用iter(a)将 a 变成一个迭代器
- iterator是一个数据流,可被next,没有提前创建控件,是一个惰性的计算
- 凡是可作用于for循环的都是Iterable类型
- 凡是可作用于next函数的对象都是Iterator,它们表示一个惰性的计算序列
- 3.x range()本质是一个迭代器
迭代器函数:iter(序列) next(迭代器)
str1 = "12345"
it = iter(str1)
遍历方式1:
for i in it:
print(i)
遍历方式2:
while True:
try:
print(next(it))
except StopIteration:
break
sys.exit()
生成器函数与yield关键字
def iteration():
for i in range(10):
yield i
it = iteration()
it 是一个生成的迭代器,可用上面的方式进行迭代
send() 函数
def iteration():
for i in range(10):
x = yield i
i = x + i
it = iteration()
it.send(None)
it.send(1)
生产者消费者模式
import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
c = consumer("ChenRonghua")
c.__next__()
# b1= "韭菜馅"
# c.send(b1)
# c.__next__()
def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了1个包子,分两半!")
c.send(i)
c2.send(i)
producer("alex")