1.迭代器:可以被next()调用,并且不断返回下一个值的对象,称为迭代器
2.迭代器没有结束限制,只要next()有值,就一直计算,当没有值的时候,报错StopIteration,停止
3.很多底层方法都是使用迭代器实现,比如for循环
for x in [1,2,3,4,5]:
pass
相当于
it = iter([1,2,3,4,5])
while True:
try:
x = next(it)
except StopIteration:
break
print(isinstance((),Iterator))
4.一边循环一遍计算的机制叫做生成器
b=[i*2 for i in range(10)]
print(b)
for i in b:
print(i)
print(len(b))
print(b.__next__())
5.使用迭代器求斐波那契数列,没求和:
#求输入值得斐波那契数
def fib(max):
n,a,b = 0,0,1
while n<max:
#print(b)
yield b#yield使其成为迭代器
a,b = b,a+b
n = n+1
return 'done'
#print(fib(10)),不使用迭代器求和
print(fib(1).next())
g = fib(5)
while True:
try:
x = next(g)
print('g:',x)
except StopIteration as e:
print('generation return value:',e.value)
break
6.迭代器并行
import time
def consumer(name):
print('%s准备喝咖啡'%name)
while True:
kafei = yield#运行到yield就会暂停
print('%s来了,%s喝了美式'%(kafei,name))
# bbs=consumer('luhan')
# bbs.__next__()
def producer(name):
c1 = consumer('a')
c2 = consumer('b')
c1.__next__()#必须传非空或者调用一次next()方法才能进行川指出操作
c2.__next__()
print('开始准备咖啡')
for i in range(10):#生产者循环10次,每次生成两杯咖啡,分给两个消费者
time.sleep(1)
print('做了一杯:')
c1.send(i)
c2.send(i)
producer('wuyifan')