zoukankan      html  css  js  c++  java
  • python(4)-迭代器 和 生成器

    迭代器是访问集合元素的一种方式。迭代器适合遍历一些巨大或无限的集合,比如几个G的文件。迭代器具有以下特点:

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

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

    3. 访问只能向前,不能后退

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

    比如:

    with open("test.txt", 'r') as f:         # f 就是迭代器
        for line n f:           
            print(line)

    迭代器的方法:

    iter()   用于生成迭代器

    >>> a = 'abcdeig'
    >>> iter(a)
    <str_iterator object at 0x00000000029ADE48>
    >>> iter([1,2,3,4,5])
    <list_iterator object at 0x00000000029ADEB8>

    __next__()  取下一个元素

    >>> a = 'abcdeig'
    >>> a = iter(a)
    >>> a.__next__()
    'a'
    >>> a.__next__()
    'b'
    >>> a.__next__()
    'c'
    >>> a.__next__()
    'd'
    >>> a.__next__()
    'e'
    >>> a.__next__()
    'i'
    >>> a.__next__()
    'g'
    >>> a.__next__()                        #没有元素时,会报Stop Iteration错误,表示没有值可以取了
    Traceback (most recent call last): 
      File "<stdin>", line 1, in <module>
    StopIteration

    生成器: 如果一个函数返回一个迭代器,那么这个函数就是生成器;如果函数中包含yield语法,那么这个函数就会变成生成器。

    下面代码是生成生成斐波那契数列的生成器:

    def fab(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
  • 相关阅读:
    JAVA 设计模式 组合模式
    JAVA 设计模式 模板方法模式
    SpringBoot 数据篇之使用JDBC
    [Spring]01_环境配置
    [spring]03_装配Bean
    [Spring]04_最小化Spring XML配置
    [Quartz笔记]玩转定时调度
    [Spring]支持注解的Spring调度器
    asp.net core 系列 13 日志
    asp.net core 系列 12 选项 TOptions
  • 原文地址:https://www.cnblogs.com/huangxm/p/5225520.html
Copyright © 2011-2022 走看看