生成器跟迭代器

Posted yuanke98

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器跟迭代器相关的知识,希望对你有一定的参考价值。

技术分享图片
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获得下一个值


以上是关于生成器跟迭代器的主要内容,如果未能解决你的问题,请参考以下文章

生成器

[js高手之路] es6系列教程 - 迭代器与生成器详解

Python之函数生成器与推导式

代码详解生成器迭代器

Python之迭代器和生成器

python列表生成式生成器,迭代器与二分法