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


    有一篇文章写得迭代器和生成器,写得很好:https://www.cnblogs.com/wj-1314/p/8490822.html

    #列表生成器
    print([i*2 for i in range(10)])

    #生成器:把列表中的[]修改为(),生成器调用时才会产生相应的数据,不调用时不暂用内存,同时只记住当前的位置,只有一个__next__()方法
    b=(i*2 for i in range(10))
    for i in b:
    print(i)

    什么是生成器?

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

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

      生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

      生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器

     

    什么是迭代器?

    可迭代对象与迭代器的区别:

      iterable:直接作用于for循环的对象

      iterator:可以被next()函数调用并不断返回下一个值的对象称为迭代器,迭代器可以通过iter()函数获得一个iterator对象

     

  • 相关阅读:
    关于Unity中表面着色器的使用
    关于Unity中顶点片元Shader实例
    php 超时 解决办法 (Maximum execution time of 30 seconds exceeded)这个问题?
    php 汉字转拼音
    jq 获取当前屏幕高度
    php 根据身份证获取出身地址
    根据身份证算出地址
    css 超详细文档
    手机端下拉获取新数据
    基于bootstrap 框架的扩展框架 H-ui
  • 原文地址:https://www.cnblogs.com/wendyw/p/9724819.html
Copyright © 2011-2022 走看看