zoukankan      html  css  js  c++  java
  • python中的迭代器

    1、为何要有迭代器?
      对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。
      但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器

    2、什么是可迭代对象?
    可迭代对象

    • 以直接作用于 for 循环的数据类型有以下几种:
    • 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
    • 一类是 generator ,包括生成器和带 yield 的generator function。
    • 这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

    判断是否可以迭代?

    可以使用 isinstance() 判断一个对象是否是 Iterable 对象:

    In [1]: from collections import Iterable
    In [2]: isinstance({}, Iterable)
    Out[2]: True
    In [3]: isinstance(100, Iterable)
    Out[3]: False  

    可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下:

    • 'world'.__iter__
    • (4,5,6).__iter__
    • [1,2,3].__iter__
    • {'a':1}.__iter__
    • {'a','b'}.__iter__
    • open('a.txt').__iter__

    3、什么是迭代器对象?

    1. 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象
    2. 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
    3. 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

    可以使用 isinstance() 判断一个对象是否是 Iterator 对象:(用法与isinstance一样)

    实例:

    a='abcdefg'
    a1={'a','b','c','d','e'}
    a2={'a':1,'b':12,'c':'cd'}
    
    res=iter(a1) #集合无序
    print(next(res))
    print(next(res))
    print(next(res))
    >>> e
    >>> d
    >>> c
    res2=iter(a2) #字典出来的是key
    print(next(res2))
    print(next(res2))
    >>> a
    >>> b
    res=iter(a1)
    n=0
    whilen<len(a2):
    print(next(res))
    n += 1
    >>> d
    >>> e
    >>> c 

    4、文件类型是迭代器对象
      open('a.txt').__iter__()
      open('a.txt').__next__()

    5、总结

      1、凡是可作用于 for 循环的对象都是 Iterable 类型;

      2、凡是可作用于 next() 函数的对象都是 Iterator 类型;

      3、集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数转化成 Iterator 对象;

      4、生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。

    作者:无荨

    -------------------------------------------

    个性签名:学IT,就要做到‘活到老学到老’!

    如果觉得这篇文章对你有小小的帮助的话,别忘记点个“推荐”哦!

  • 相关阅读:
    25、排序算法之选择法排序 (待完成)
    24、求一个3×3的整型矩阵对角线元素之和
    23、32、输入一个字符,输出其大写字符 (待完成)
    22、有一个已排好序的数组,要求输入一个数字后,按原来的排序规律将它插入数组
    21、二维数组行列转换
    20、30、用冒泡法对N个数排序--升序 (完成)
    19、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个1~9的数字。例如2+22+222+2222+22222(此时共有5个数相加)。
    18、1-3+5-7+···-99+101等于多少
    17、反向输出
    16、判断101-200之间有多少个素数,并输出所有素数。
  • 原文地址:https://www.cnblogs.com/twoo/p/11672260.html
Copyright © 2011-2022 走看看