• 迭代器 和 生成器


    什么是迭代器?

    迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素, 所有实现了 iternext 两个方法的对象,都是迭代器。

    迭代器的优势

    在构建迭代器时,不是将所有的元素一次性的加载,而是等调用next方法时返回元素,所以不需要考虑内存的问题。

    迭代器应用场景

    • 数列的数据规模巨大
    • 数列有规律,但是不能使用列表推导式描述。

    迭代器示例

    In [5]: x = [1, 2, 3]
    
    In [6]: y = iter(x)
    
    In [7]: type(y)
    Out[7]: list_iterator
    
    In [8]: y.__iter__
    Out[8]: <method-wrapper '__iter__' of list_iterator object at 0x109ee0eb8>
    
    In [9]: y.__iter__()
    Out[9]: <list_iterator at 0x109ee0eb8>
    
    In [10]: y.__next__()
    Out[10]: 1
    
    In [11]: y.__next__()
    Out[11]: 2
    
    In [12]: y.__next__()
    Out[12]: 3
    
    In [13]: y.__next__()
    ---------------------------------------------------------------------------
    StopIteration                             Traceback (most recent call last)
    <ipython-input-13-2c928e09acf4> in <module>()
    ----> 1 y.__next__()
    
    StopIteration:
    
    In [14]:
    

    生成器

    生成器是一种高级迭代器,使得需要返回一系列元素的函数所需的代码更加的简单和高效。一边循环一边计算的机制,称为生成器。

    生成器示例

    # 示例1:将列表表达式改装成生成器
    In [20]: a_list = [x**2 for x in range(5)]
    In [21]: a_list
    Out[21]: [0, 1, 4, 9, 16]
    
    In [22]: a_generator = (x**2 for x in range(5))
    
    In [23]: a_generator
    Out[23]: <generator object <genexpr> at 0x109e95830>
    
    # 示例2:通过 yield
    In [33]: def gen_by_yiels():
        ...:     yield "first"
        ...:     yield "second"
        ...:     yield "third"
        ...:
        
    In [34]: gen_by_yiels
    Out[34]: <function __main__.gen_by_yiels()>
    
    In [35]: gen_by_yiels()
    Out[35]: <generator object gen_by_yiels at 0x109f2bf68>
    
    In [36]: for x in gen_by_yiels():
        ...:     print(x)
        ...:
        ...:
        ...:
    first
    second
    third
    

    参考资料:https://www.zhihu.com/question/20829330

  • 相关阅读:
    做一点,记一点 ~ JQuery EasyUI使用小结(注意点)
    做一点,记一点 ~ Java调用Oracle存储过程
    Linux中定时执行DB2的存储过程
    Apache POI -- Java 导出Excel文档(笔记)
    一篇很不错的学习Flex的入门级教程
    Java的String和StringBuffer和StringBuilder详解
    Java操作properties文件
    认识WebService
    J2EE安全策略:为tomcat页面设置访问权限(j_security_check)
    MyEclipse 2014常用设置
  • 原文地址:https://www.cnblogs.com/ronky/p/9844985.html
Copyright © 2020-2023  润新知