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

    一、迭代器

    1、迭代器iterator中只能包含可迭代对象。可用于for循环的对象是可迭代对象Iterable,如list,tuple等,可迭代对象不能用__next__()访问元素

    2、能用于for循环,且能通过__next__()访问的对象是迭代器Iterator,如生成器就是一个迭代器对象

    3、只能通过__next__()依次获取迭代器中的元素,不能通过下标才查找

    4、读取量很大的数据时,用迭代器可节省内存

    >>> a=iter([1,2,3,4])
    >>> b=iter((5,6,7,8))
    >>> a.__next__()
    1
    >>> a.__next__()
    2
    >>> b.__next__()
    5
    >>> b.__next__()
    6

    4、判断一个对象是否为可迭代对象 和 迭代器对象

    >>> from collections import Iterable
    >>> from collections import Iterator
    
    >>> list1 = [1,2,3,4]  #list1是一个可迭代对象
    >>> a = iter(list1)   #将list转化为迭代器对象
    
    >>> isinstance(list1,Iterable)
    True
    >>> isinstance(list1,Iterator)
    False
    >>> isinstance(a,Iterator)
    True
    >>> isinstance(a,Iterable) #迭代器对象一定是可迭代对象
    True
    
    >>> b = list(a) #将迭代器对象转化为list
    >>> b
    [1, 2, 3, 4]

    二、生成器

    1、返回迭代器的函数是一个生成器generator。生成器可用于for循环,也可用__next__()取值

    #函数func(n)是一个生成器,返回包含斐波拉契数列的一个迭代器。
    def func(n):
        a, b = 0, 1
        for i in range(n):  
            yield b
            a, b = b, a+b
    
    #func()是一个生成器,可用于for循环
    for i in func(3):
        print(i)

    2、另一种创建生成器的方法

    >>> a = [x**2 for x in range(3)]
    >>> a
    [0, 1, 4]
    >>> type(a)
    <class 'list'>
    
    >>> b = (x**2 for x in range(3)) #b是一个生成器
    >>> b
    <generator object <genexpr> at 0x0221CB70>
    >>> for i in b:
    ...     print(i)
    ...
    0
    1
    4
    >>>
  • 相关阅读:
    树莓派4B 多屏 QT程序窗口全屏 QScreen 只能获取1个屏幕
    树莓派4B 微雪7寸触摸屏 双屏 触摸屏校正
    虚拟机 ubuntu18 树莓派4 QT5.14.2 交叉编译
    Qt 指定 so库 运行时路径
    building qtqml requires python
    python django 测试报告 发送邮件
    jmeter XPath Extractor
    python+unittest+HTMLTestRunner生成测试报告
    Genymotion、 uiautomatorviewer、 appium报错
    jmeter forEach控制器
  • 原文地址:https://www.cnblogs.com/jessicaxu/p/7743416.html
Copyright © 2011-2022 走看看