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

    一.迭代器

    迭代器是访问集合元素的一种方式

    迭代器是一个可以记住遍历的位置的对象。

    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    迭代器有两个基本的方法:iter() 和 next()

    字符串,列表或元组对象都可用于创建迭代器

    特点:

    1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
    2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
    3. 访问到一半时不能往回退
    4. 便于循环比较大的数据集合,节省内存  
    >>> li = [1,2,3]
    >>> it = iter(li)
    >>> print(next(it))
    1
    >>> print(next(it))
    2
    >>> print(next(it))
    3

      迭代器可以使用for循环进行遍历

    >>> li = [1,2,3]
    >>> it = iter(li)
    >>> for i in it:
    ...     print(i)
    ...
    1
    2
    3

    二.生成器

      一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator)

      如果函数中包含yield语法,那这个函数就会变成生成器

      生成器运作:

        当达到一个真正的返回或者函数结束没有更多值返回(当调用next()),一个StopIteration异常就会抛出

    def func():
        yield 1
        yield 2
        yield 3
        yield 4
    >>> temp = func()
    >>> temp.__next__()
    1
    >>> temp.__next__()
    2
    >>> temp.__next__()
    3
    >>> temp.__next__()
    4
    >>> temp.__next__()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    def frang(n):
        start = 0
        while start < n:
            yield start
            start += 1
    
    valu = frang(5)
    n1 = valu.__next__()
    n2 = valu.__next__()
    print(n1,n2)

     

  • 相关阅读:
    StreamBox Ripper 将rm转mp3时候出现g2支持的问题
    网上英语学习资源大整理
    516 find
    怎样使孩子愿意学习
    Oracle日期函数
    Create PR/PO 以后Status的变化
    销售到出仓所经历的表
    UTL_FILE 的用法
    Oracle EBS常用数据表
    我的blog今日开园
  • 原文地址:https://www.cnblogs.com/jl-bai/p/5539630.html
Copyright © 2011-2022 走看看