• Python学习之--迭代器、生成器


    迭代器

    迭代器是访问集合元素的一种方式。从对象第一个元素开始访问,直到所有的元素被访问结束。迭代器只能往前,不能往后退。迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调用该方法可以返回一个元素。
    迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。适合遍历一些巨大的或是无限的集合。

    特点:
    1 访问者不需要关心迭代器内部的结构,仅需要通过next()方法去获取下一个内容
    2 不能随机访问集合中的某个值,只能从头到尾访问
    3 访问到一半时不能回退
    4 便于循环比较大的数据集合,省内存

    l=iter([1,2,3])
    >>> l=iter([1,2,3])
    >>> l
    <list_iterator object at 0x007FB530>
    >>> print(l.__next__())
    1
    >>> print(l.__next__())
    2
    >>> print(l.__next__())
    3
    >>> print(l.__next__())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration

     读文件的时候,采用for line in file:的形式,是按照迭代器的方式进行读,比较节省内存。

    生成器


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

    def cash_amount(amount):
        while amount>0:
            amount -=100:
            yield 100
            print("又来取钱啦")
    atm=cash_amount(500)
    print(type(atm))
    sample

    生成器的好处可以让你在执行函数的时候不必等到函数执行完毕。

    实例、使用yield实现单线程中的异步并发效果
    应用-生产者消费者模型

    def consumer(name):
        print("%s 准备吃包子啦!" %name)
        while True:
            baozi=yield
            print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
    
    def producer(name):
        c=consumer('A')
        c2=consumer('B')
        c.__next__()
        c2.__next__()
        for i in range(10):
            print("%s 做好了2个包子!" %name)
            c.send(i)
            c2.send(i)
    
    producer('chef')
    Code
  • 相关阅读:
    Linux消息队列编程
    Leetcode 1332. 删除回文子序列(看完题解才恍然大悟!!!!!!!)
    c++ 继承关系中的虚函数表
    C++(17):filesystem
    Leetcode 1331. 数组序号转换
    new和malloc的区别
    简述三次握手和四次挥手
    Leetcode 1296. 划分数组为连续数字的集合(提供一种思路)
    Leetcode 1275. 找出井字棋的获胜者
    JZ060把二叉树打印成多行
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/5198466.html
Copyright © 2020-2023  润新知