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

    前言:

    我们来了解一下什么是python中生成器。了解一下python生成器是什么,以及生成器python编程之中能起到什么样的作用

    定义:

    生成器和迭代器

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

    >>> L = [x * x for x in range(10)]
    
    >>> L
    
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    >>> g = (x * x for x in range(10))
    
    >>> g
    
    <generator object <genexpr> at 0x1022ef630>

    在上面的例子中:(x * x for x in range(10))是生成器,g是迭代器。

    因为生成器是能够返回一个迭代器的函数,其最大的作用是将输入对象返回为一个迭代器

    生成器是个函数!迭代器是个对象!在python3.5中,range(5)是一个生成器,返回的结果是一个对象,即<generator object <genexpr> at 0x1022ef630>就是一个迭代器

    我们创建了一个generator后,通过for循环来迭代它,并且不需要关心StopIteration的错误。

    g = (x * x for x in range(10))
    for i in g:
        print(i)

    运行结果:

    0
    1
    4
    9
    16
    25
    36
    49
    64
    81

    或者我们可以通过__next__()从生成器中取值

    g = (x * x for x in range(10))
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())

    运行结果:

    0
    1
    4
    9

    generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

    创建迭代器

    A、使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器

    a=[1,2,3,4]
    b=(1,2,3)
    str='Tomwenxing'
    print(iter(a))
    print(iter(b))
    print(iter(str))

  • 相关阅读:
    罗杨美慧 20180912-3 词频统计
    罗杨美慧 20190912-2 命令行
    罗杨美慧 20190905-1 每周例行报告
    罗杨美慧 20190905-2 博客作业
    20190919-4 测试,结对要求
    孙晓宇-20190912-1 每周例行报告
    孙晓宇-20180912-3 词频统计
    (第二周)孙晓宇20190912-2 命令行
    孙晓宇20190905-2 博客作业
    孙晓宇20190905-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/9831579.html
Copyright © 2011-2022 走看看