热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可迭代对象、迭代器与生成器

迭代器什么是迭代器迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。为什么用迭代器为了找出一种通用的&a

迭代器

什么是迭代器
迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。
迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。
为什么用迭代器
为了找出一种通用的&可以不依赖于索引的迭代取值方式。
如何用迭代器
可迭代的对象:但凡内置有__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

  4. 提供一种自定义迭代器的解决方案
  5. yield可用于返回值
    yield和return的异同
    相同点:都可以用于返回值
    不同点:yield可以暂停函数,yield可以返回多个值,而return只能返回一次值且会终止函数的运行。
    一个自定义的生成器
def my_range(start,stop,step=1):
    while start

推荐阅读
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文详细介绍了Python中的可迭代对象、迭代器和生成器的概念及实现方式。通过实例代码展示如何创建和使用这些对象,帮助读者更好地理解和掌握其原理。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 使用Python计算文件的CRC32校验值
    本文记录了一次对路由器固件分析时,如何利用Python计算文件的CRC32校验值。文中提供了完整的代码示例,并详细解释了实现过程。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文介绍了SVD(奇异值分解)和QR分解的基本原理及其在Python中的实现方法。通过具体代码示例,展示了如何使用这两种矩阵分解技术处理图像数据和计算特征值。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
author-avatar
原来我不帅S_420
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有