美文网首页
015 Python语法之迭代器与生成器

015 Python语法之迭代器与生成器

作者: Luo_Luo | 来源:发表于2017-07-09 19:18 被阅读0次

    迭代器

    1. 可用于集合,列表,元组,字典,字符串
    2. 可以用于节省内存,用完一个数据就可以del掉
    3. 可循环的对象统称为:Iterable
    4. 可被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
    5. 可以用iter(a)将 a 变成一个迭代器
    6. iterator是一个数据流,可被next,没有提前创建控件,是一个惰性的计算
    7. 凡是可作用于for循环的都是Iterable类型
    8. 凡是可作用于next函数的对象都是Iterator,它们表示一个惰性的计算序列
    9. 3.x range()本质是一个迭代器

    迭代器函数:iter(序列) next(迭代器)

    str1 = "12345"
    it = iter(str1)
    
    遍历方式1:
    for i in it:
        print(i)
    
    遍历方式2:
    while True:
        try:
            print(next(it))
        except StopIteration:
            break
            sys.exit()
    

    生成器函数与yield关键字

    def iteration():
        for i in range(10):
            yield i
    
    it = iteration()
    it 是一个生成的迭代器,可用上面的方式进行迭代
    

    send() 函数

    def iteration():
        for i in range(10):
            x = yield i
            i = x + i
            
    it = iteration()
    it.send(None)
    it.send(1)
    

    生产者消费者模式

    import time
    
    def consumer(name):
        print("%s 准备吃包子啦!" %name)
        while True:
           baozi = yield
    
           print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
    
    c = consumer("ChenRonghua")
    c.__next__()
    
    # b1= "韭菜馅"
    # c.send(b1)
    # c.__next__()
    
    def producer(name):
        c = consumer('A')
        c2 = consumer('B')
        c.__next__()
        c2.__next__()
        print("老子开始准备做包子啦!")
        for i in range(10):
            time.sleep(1)
            print("做了1个包子,分两半!")
            c.send(i)
            c2.send(i)
    
    producer("alex")
    

    相关文章

      网友评论

          本文标题:015 Python语法之迭代器与生成器

          本文链接:https://www.haomeiwen.com/subject/wbkehxtx.html