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

  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/yuanke98/p/9197973.html
Copyright © 2011-2022 走看看