zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    他说
    他说
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    使用include重用布局
    RxJava学习(一)——简介及其优势
    Android自定义ProgressBar样式
    Android Studio 3.0 新特性
    EventBus用法
    Android将Log写入文件
    Android 编程下 Touch 事件的分发和消费机制
  • 原文地址:https://www.cnblogs.com/it-q/p/8509835.html
Copyright © 2011-2022 走看看