zoukankan      html  css  js  c++  java
  • 生成器跟迭代器

    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获得下一个值

  • 相关阅读:
    二叉树的存储方式以及递归和非递归的三种遍历方式
    java基础04 匿名内部类
    jvm007 jvm知识点总览
    jvm学习006 jvm内存结构分配
    java基础03 位运算符
    java基础02 数据类型转
    jvm005 从jvm的角度谈谈线程的实现
    Arcgis投影变换后图像变深的问题
    win 7 64位如何安装erdas 9.2
    Win7 64bit 成功安装ArcView3.X
  • 原文地址:https://www.cnblogs.com/yuanke98/p/9197973.html
Copyright © 2011-2022 走看看