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

    迭代意味着重复多次,是实现了__iter__的对象,包含了__next__方法

    当调用__next__时迭代器返回下一个值,如果没有可供返回的值,引发StopTteration异常,也可以使用等价的next()函数

    nest(it)等效于__next__(it)

    实现了方法__iter__的对象是可迭代的,实现了__next__的对象是迭代器

    ***************************************************************************************************

    生成器是一种使用普通函数语法定义的迭代器

    通过一个例子来说明

    nested = [[1, 2], [3, 4], [5, 6]]
    def flatten(nested):
        for sublist in nested:
            for element in sublist:
                yield element
    #包含yield语句函数都被成为生成器
    #生成器不使用return返回值,而是可以生成多个值,每次一个
    #每次使用yield生成一个值后函数都将被冻结,等待重新唤醒
    #被唤醒后,从停止的地方重新开始执行
    
    for num in flatten(nested):
        print(num)

    生成器由两个单独的部分组成:生成器函数和生成器的迭代器,生成器的函数由def定义,其中包含yield;生成器的迭代器是这个函数的返回结果

    生成器方法:

    send() 在外部世界向生成器发送一个参数

    throw   用于在yield处引发异常,可提供一个异常类型,一个可选值和一个traceback对象

    close   用于停止生成器,无需提供参数

  • 相关阅读:
    问题堆栈区39+40
    ListView优化分页优化
    AsyncTask理解- Day36or37
    Activity是如何挂载Pargment的Day35
    BroadcastReceiver和Intetnt的理解 Day34
    深入理解自定义ListView
    手势识别=读取手机联系人=ContentResolver-Day3
    Android本地JUnit Text
    Java——(一)一切都是对象
    SciTE: 中文字符支持问题
  • 原文地址:https://www.cnblogs.com/wang-jie-devops/p/10862301.html
Copyright © 2011-2022 走看看