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
  • 相关阅读:
    揭开HTTPS神秘面纱
    HTTP常见状态码
    js常用小代码
    通俗讲解OSI七层模型
    WSCDL所在的协议栈位置
    Models and Verification of BPEL
    mysql root密码修改
    c++ Socket 学习笔记一
    mysql备份
    圣杯布局
  • 原文地址:https://www.cnblogs.com/huangxm/p/5225520.html
Copyright © 2011-2022 走看看