• 20180305-Python中迭代器和生成器


    一.迭代器

    迭代器是访问集合元素的一种方式。迭代器从访问到集合的第一个元素开始访问,直到所有元素被访问结束。而且迭代器只能往前访问,不能后退。另外迭代器的另一个优点,不会事先准备好访问的集合的所有元素。迭代器只有在迭代到某个元素后才会访问元素,而在这之前或之后,元素可以不存在或者销毁,这个特点是他特别适用于访问比较大或者无限的集合。

    特点:

      1.访问者不需要了解内部结构,仅需通过next()方法不断获取下一个内容

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

      3.访问到一半时不能回退

      4.便于遍历比较大的集合,节省内存

    >>> a = iter([1,2,3,4])
    >>> a
    <list_iterator object at 0x10467b3c8>
    >>> a.__next__()
    1
    >>> a.__next__()
    2
    >>> a.__next__()
    3
    >>> a.__next__()
    4
    >>> a.__next__()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration

    二.生成器

    一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就变成了生成器

    >>> def func():
              yield 1
              yield 2
              yield 3
              yield 4
              yield 5        

    上述代码中,当执行func函数时会生成一个生成器

    >>> tmp = func()
    >>> tmp.__next__()
    1
    >>> tmp.__next__()
    2
    >>> tmp.__next__()
    3
    >>> tmp.__next__()
    4
    >>> tmp.__next__()
    5
    >>> tmp.__next__()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration

    项目实战

    利用生成器自定义range

    def zrange(num):
        start = -1
        while True:
            start += 1
            if start >= num:
                return
            else:
                yield start
  • 相关阅读:
    VTK初学一,b_PolyVertex多个图形点的绘制
    VTK初学一,a_Vertex图形点的绘制
    Python基础学习之集合
    Apache
    NTP时间同步服务和DNS服务
    NFS服务及DHCPD服务
    samba服务及vsftpd服务
    Linux rpm和yum软件管理
    Linux网络技术管理及进程管理
    Linux RAID磁盘阵列
  • 原文地址:https://www.cnblogs.com/it-q/p/8509835.html
Copyright © 2020-2023  润新知