zoukankan      html  css  js  c++  java
  • python 基础(五) 迭代器与生成器

    迭代器和生成器

    迭代器 iterator

    (1) 迭代对象:

    可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象

    可以直接作用于for循环的数据类型为:

    1. 列表,字典,集合,元组,字符串...

    2. generator 带yield的函数

    实例 判断哪些是可迭代对象

     
    from collections import Iterable
    print(isinstance('',Iterable)) #True
    print(isinstance(1,Iterable)) #False
    print(isinstance(True,Iterable)) #False
    print(isinstance([],Iterable)) #True
    print(isinstance(1.1,Iterable)) #False
    print(isinstance((),Iterable)) #True
    print(isinstance(set(),Iterable)) #True
     
    (2) 迭代器 iterator
    1. 是快速访问集合的一种方式

    2. 迭代器提供了俩个方法 iter() 和 next()

    3. 迭代器在访问的时候 只能前进 不能后退

    4. 当数据被访问完以后 再次访问 则会抛出 StopIteration的错误

    5. 迭代器的前提 必须是一个可迭代对象

    6. 称为迭代器以后 增加了next方法进行取值 并且依然支持for循环

    判断当前是否属于迭代器:

    from collections import Iterator
    print(isinstance([],Iterator))  #False
    print(isinstance(iter([]),Iterator))  #True
     

    生成器 generator

    1. 带有yield 的函数

    2. 使用列表推导式 外层使用小括号 称之为生成器

    3. 生成器 也能够使用 迭代器的 next方法 生成器也实现了迭代器的功能

    (1) 使用列表推导式生成的生成器

    可以使用next 并且 可以作用于for循环

    myList = (x for x in range(100000000000)) #generator
    用一个生产一个 并不是一次性的全部生产出来 节约资源
    from collections import Iterator,Generator
    myList = (x for x in range(100000000000)) #generator
    myList = (x for x in range(3)) #generator
    print(isinstance(myList,Iterator)) #True
    print(isinstance(myList,Generator)) #True
     

    (2) 带yield的函数

    1. yield

    2. next()

    生成器的拆分 (后期的协程 就是基于当前的生成器 只是可以之间通过send方法进行通信 节省资源的开销 因为是单进程单线程)

     
     
    #生成器拆分
    def func():
        print(1)
        yield 'a'
        print(2)
        yield 'b'
        
    f = func()
    # print(f)
    print(next(f))
    print(next(f))
    print(next(f))
     

    每次调用next 会执行到下一个yield 位置并停止 将yield的值 进行返回

     

  • 相关阅读:
    iOS本机生成证书请求文件流程
    NET开发必备工具之-LINQPad
    css3 地球自转公转
    css3 里外转 动画
    css动画,三片扇叶旋转
    max-height、min-height、height优先级的问题
    前端实现在线预览pdf、word、xls、ppt等文件
    原生js实现上传下载
    js通过拍照或相册选择图片后,做压缩处理
    原生js 手机端 调用 拍照、录像、录音、相册(含图片或视频)、音频文件等
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9715246.html
Copyright © 2011-2022 走看看