生成器跟迭代器

import time
def test(name):
    print('33[31;m%s已经准备好了,test:33[0m'%name)
    while True:
        baozi=yield
        print('33[31;m第%s包子来了,%s吃了33[0m'%(baozi,name))
def test1(*args):
    c1=test('逯晓华')   #指明c1,c2 只是一个生成器
    c2=test('袁珂')
    c1.__next__()
    c2.__next__()
    print('我要开始做了:')
    for i in range(1,10):
        c1.send(i)
        c2.send(i)
        if i%2==0:
            print('33[31;m嗯,你俩一人一半33[0m')
        time.sleep(3)
test1('大厨')

#c1.__next__() 只是运行到yield
#c2 也是一样
#在以后的for循环里c1.__next__()起一个给yield 赋值,并且再一次运行到 yield
#以后的每次循环都是这样
View Code

上面的是生成器的运用#

迭代器:

 可以被for循环的称谓可迭代对象(iterable) 例如:(列表,元素,集合)等等(list,tuple,dict,str)

可以用next的被称为迭代器对象

列表转换为迭代器对象用iter函数

list.iter

a=[1,2,3]
b=iter(a)
print(b.__next__())
print(b.__next__())
print(b.__next__())
View Code

python的iterator ,iterator对象可以被next(),数据流可以看作一个有序的数列,但我们却不能知道他的长度

小结:
凡可作用于for 循环的对象都是iterable类型

凡可以于next()函数的对象都是iterator对象,他表示一个惰性计算序列

集合序列等可以通过iter 函数获得一个迭代器对象。

等价于for循环

it=iter([1,2,3,4])
while True:
    try:
        x=next(it)
        print(x)
    except StopIteration:
    #遇到StopIteration 错误就退出
        break
View Code

X获得下一个值

原文地址:https://www.cnblogs.com/yuanke98/p/9197973.html