zoukankan      html  css  js  c++  java
  • 可迭代对象、迭代器与生成器

    迭代器

    什么是迭代器
    迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。
    迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。
    为什么用迭代器
    为了找出一种通用的&可以不依赖于索引的迭代取值方式。
    如何用迭代器
    可迭代的对象:但凡内置有__iter__方法得当对象都称之为可迭代的对象
    迭代器对象:既内置有__iter__,又内置__next__方法
    关于__iter__方法:

    1. 调用可迭代对象的__iter__会得到一个迭代器对象
    2. 调用迭代器对象的__iter__会得到迭代器本身

    迭代器的优缺点
    有点

    1. 提供了一种通用的&可以不依赖于索引的迭代取值方式
    2. 同一时刻在内存中只有一个值,更加节省内存
      缺点
    3. 取指定值时不如索引灵活,并且迭代器是一次性的,只能往前取值
    4. 无法预知迭代器数据的个数

    可迭代的对象
    str、list、tuple、dict、set、文件对象
    迭代器对象
    文件对象是python定义好的迭代器对象

    可迭代对象如何转化为迭代器对象

    调用可迭代对象内置的__iter__方法会得到一个返回值,该返回值就是对应的迭代器对象

    for循环

    for循环准确的说应该是迭代器循环,原理如下:

    1. 先调用in后面可迭代对象的__iter__方法,得到迭代器对象
    2. 执行迭代器的__next__方法得到一个返回值,赋值给每次循环的变量,运行循环体代码
    3. 循环往复,直到迭代器取值完毕抛出异常然后捕捉异常结束循环

    自定义迭代器

    定义一个迭代器必须要有yield关键字
    在函数内但凡包含有yield关键字,运行到yield时,会暂停运行并会得到一个返回值,该返回值成为生成器对象,生成器本质就是迭代器
    yield

    1. 提供一种自定义迭代器的解决方案
    2. yield可用于返回值
      yield和return的异同
      相同点:都可以用于返回值
      不同点:yield可以暂停函数,yield可以返回多个值,而return只能返回一次值且会终止函数的运行。
      一个自定义的生成器
    def my_range(start,stop,step=1):
        while start<stop:
            yield start
            start+=step
    res=my_range(1,5,2)
    print(next(res))
    print(next(res))
    
  • 相关阅读:
    PHP | 运算符优先级
    Docker配置PHP+Nginx+MySQL
    Windows下Mysql主从配置
    php-fpm重启配置修改无效
    MySQL事务
    hadoop伪集群搭建
    Springboot2.x源码下载安装
    微服务——服务之间访问,用Feign请求服务接口超时如何解决?
    Lua安装
    日期——计算每月第一天和最后一天
  • 原文地址:https://www.cnblogs.com/zuanzuan/p/9720875.html
Copyright © 2011-2022 走看看