zoukankan      html  css  js  c++  java
  • python基础-第六篇-6.1生成器与迭代器

    迭代器

    特点:

    1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

    2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问

    3. 访问到一半时不能往回退

    4. 便于循环比较大的数据集合,节省内存

    names = iter(['alex','wupeiqi','eva'])
    print(names)
    print(names.__next__())
    print(names.__next__())
    print(names.__next__())
    #在往下取就报错
    # print(names.__next__())
    

    生成器

      一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 

    #ATM
    def cash_money(amount):
        while amount > 0:
            amount -= 100
            yield 100
            print('又来取钱啦!')
    
    #这里没有真正执行函数,只是把函数变成一个迭代器
    atm = cash_money(500)
    # print(atm)
    print(atm.__next__())
    print(atm.__next__())
    print('叫个大保健')
    print(atm.__next__())
    

    yield单线程异步并发

    #消费者生产者模型
    
    import time
    def consumer(name1):
        print('{name}准备吃包子啦!'.format(name = name1))
        while True:
            baozi = yield
            print('第{baozi_num}个包子来了,被{name}吃了!'.format(baozi_num=baozi,name=name1))
    
    def producer(name2):
        c = consumer('a')
        c2 = consumer('b')
        c.__next__()
        c2.__next__()
        print('{name}开始准备做包子啦!'.format(name=name2))
        for i in range(1,6):
            time.sleep(1)
            print('做了两个包子!')
            c.send(i)
            c2.send(i)
    
    producer('alex')
    

    生成器表达式

      列表解析和生成器表达式非常的相似,不过有一点明显的区别:列表解析是用中括号括起来,而生成器表达式则是小括号

    #列表解析
    li = [i+100 for i in range(10)]
    print(li)
    
    #加条件
    li2 = [i+100 for i in range(10) if i % 2 == 0]
    print(li2)
    

       由于列表解析非常占内存,所以不适用大数据的场景

    #生成器表达式
    li = (i+100 for i in range(10))
    print(li)
    #<generator object <genexpr> at 0x0000000000A2AE08>
    
    #加条件
    li2 = (i+100 for i in range(10) if i % 2 == 0)
    for x in li2:
        print(x)
    

                                                   欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                                 笔者:拍省先生  

     

  • 相关阅读:
    2016年3月3日
    性能测试之我解
    Vim命令合集
    vi-vim常用命令
    架构的本质是
    网站三层架构学习之一 分层式结构
    Spring 4 + Quartz 2.2.1 Scheduler Integration Example
    “城市民族工作条例”详解--建议废止
    字符串匹配处理
    LogBack简易教程
  • 原文地址:https://www.cnblogs.com/xinsiwei18/p/5616058.html
Copyright © 2011-2022 走看看