码迷,mamicode.com
首页 > 其他好文 > 详细

生成器跟迭代器

时间:2018-06-19 13:38:24      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:str   获得   通过   ble   退出   rabl   序列   imp   sleep   

技术分享图片
import time
def test(name):
    print(\033[31;m%s已经准备好了,test:\033[0m%name)
    while True:
        baozi=yield
        print(\033[31;m第%s包子来了,%s吃了\033[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(\033[31;m嗯,你俩一人一半\033[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获得下一个值

生成器跟迭代器

标签:str   获得   通过   ble   退出   rabl   序列   imp   sleep   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!