zoukankan      html  css  js  c++  java
  • python自动化开发5

    列表生成式 生成器 迭代器

    •   列表生成式

          举个例子

        列表[0, 1, 2, 3, 4, 5, 6],要求把列表里的每个值加1,如何实现呢?      

    
    
    1 L=[0, 1, 2, 3, 4, 5, 6]
    2 a={i+1 for i in L}
    3 print(a)
    View Code
    
    
    运行结果:{1, 2, 3, 4, 5, 6, 7}

    说明:以上例子的实现方法就叫做列表生成式。
    •   生成器
          生成器:
      如果列表中的元素可以按照某种算法推算出来,这样就不必创建完整的list,从而节省大量的空间。在Python中,把这种一边循环一边计算的机制,称为生成器:即generator。
           创建生成器的方法如下:
            方法1:把一个列表生成式的[]改成(),就创建了一个generator。
              例子:
              
    1 L =(i+1 for i in range(6))
    2 for i in L:
    3     print(i)
    View Code

    运行结果:1 2 3 4 5 6

        注意generator即生成器保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

        

           方法2使用yield创建生成器,即生成器函数。
          如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
            例子:          
            
    1 def updown(n):
    2     for x in range(1, n): yield x
    3 for i in updown(10):
    4     print(i)
    View Code
    
    
    运行结果:1 2 3 4 5 6 7 8 9
    •   迭代器      迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。通俗地讲,可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
            生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator


      总结:

      凡是可作用于for循环的对象都是Iterable类型;

    
    

      凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    
    

      集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    
    

      Python语言的for循环本质上就是通过不断调用next()函数实现的。







     


          
          

      

        

  • 相关阅读:
    创建Variant数组
    ASP与存储过程(Stored Procedures)
    FileSystemObject对象成员概要
    Kotlin 朱涛9 委托 代理 懒加载 Delegate
    Kotlin 朱涛 思维4 空安全思维 平台类型 非空断言
    Kotlin 朱涛7 高阶函数 函数类型 Lambda SAM
    Kotlin 朱涛16 协程 生命周期 Job 结构化并发
    Proxy 代理模式 动态代理 cglib MD
    RxJava 设计理念 观察者模式 Observable lambdas MD
    动态图片 Movie androidgifdrawable GifView
  • 原文地址:https://www.cnblogs.com/renyongbin/p/6418076.html
Copyright © 2011-2022 走看看