Python生成器和迭代器区别与联系

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二 阅读详情

简单对比

迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己的本身,对于string、list、dict、tuple等这类容器对象,使用for循环会更加方便。在后台for语句对容器对象调用iter()函数,iter()是Python内置函数。

iter()会返回一个定义了next()方法的迭代器对象,在容器中逐个访问容器内元素,next()也是Python的内置函数,无后续元素时,next()会抛出一个StopIteration异常

生成器是创建迭代器简单而强大的工具,像正规函数,在需要返回数据的时候使用yield语句,每次next()被调用时,生成器会返回它脱离的位置。

迭代器和生成器区别主要在于生成器可以做迭代器的事情,生成器是一种特殊的迭代器。

个人理解: 生成器是特殊的迭代器,封装好迭代器的功能更便于使用,迭代器更偏向于底层功能的实现和开发。

详细分析

迭代器

Python中一个实现_iter_方法和_next_方法的类对象,就是迭代器。
是一个能记住遍历位置的对象,遍历时只能往前,不能后退。迭代器常用方法有 iter() 和 next().
把一个类作为迭代器使用需要在类中实现两个函数:iter() 和 next().

生成器

Python 中使用了 yield 的函数称为生成器,生成器函数返回一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
生成器函数自动实现了迭代器协议,能更方便地实现。
生成器函数 和 生成器表达式都可以提供生成器,只需要简单地将列表推导的中括号替换成圆括号即可

二者区别

1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。
2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
3.生成器是只能遍历一次的。

为什么使用生成器

Python使用生成器对延迟操作提供了支持。在需要的时候才产生结果,而不是立即产生结果。
1、节省资源消耗,和声明序列不同的是生成器在不使用的时候几乎不占内存,也没有声明计算过程!
2、使用的时候,生成器是随用随生成,用完即刻释放,非常高效!
3、可在单线程下实现并发运算处理效果。

yeild 与 return的区别

相同点:都是返回函数执行的结果
不同点:return 在返回结果后结束函数的运行,而yield 则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

内容学习补充

迭代器

迭代器:

iterable:可迭代的东西
str, list, tuple, dict, set, open()

获得迭代器的两种方案:
1. iter()内置函数可以直接拿到迭代器
2. iter() 特殊方法

从迭代器中拿到数据:
1. next()内置函数
2. next() 特殊方法

for里面一定是要拿迭代器的,所以所有不可迭代的东西都不能用for循环
for循环里面一个有__next__的出现

总计:迭代器统一了不同数据类型的遍历工作

迭代器本身也是可以迭代的

迭代器本身的特性:
1. 只能向前不能反复。
2. 特别节省内存
3. 惰性机制

it = "你叫什么名字".__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())

生成器

生成器:
生成器的本质就是迭代器

创建生成器的两种方案:
    1. 生成器函数
    2. 生成器表达式

生成器函数
    生成器函数有一个关键字yield
    生成器函数执行的时候,并不会执行函数,得到的是生成器

    yeild:只要函数中出现了yield,他就是一个生成器函数
        作用:
            1. 可以返回数据
            2. 可以分段的执行函数中的内容,通过__next__()可以执行到下一个yield的位置  

    优势:
        用好了,特别的节省内存
def order():
    lst = []
    for i in range(1000):
        lst.append('衣服'+str(i))
        if len(lst) == 50:
            yield lst
            lst.clear()

gen = order()
print(gen.__next__()) # lst中只存在50个内存
print(gen.__next__())

参考链接:https://www.cnblogs.com/songshutai/p/15668864.html
参考链接:http://blog.itpub.net/69952527/viewspace-2730909/

当启动容器的时候提示:exec format error?如何解决问题 Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。 阅读详情

相关推荐

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

python生成器和迭代器

                                     Python3迭代器和生成器  很多朋友在初次接触 python 的 迭代器 和 生成器 时,总是不理解 生成器 和 迭代器的作用 和它们之间的关系,今天笔者来详细的讲解一下。 知识点目录: 一、迭代器 1.什么是迭代器 2.举例说明 3.StopIteration 异常的作用 4.举例说明 StopItera...

S1433972007LJ的博客 1658

一种基于改进YOLOv8并与ORB-SLAM3融合的动态环境密集点云同步定位与建图(SLAM)方法

文章提出了一种基于改进 YOLOv8 与 ORB-SLAM3 融合的动态环境稠密点云 SLAM 方法,通过引入GSConv 卷积模块和VoVGSCSP 特征融合模块优化 YOLOv8 的轻量性,结合实时目标检测与语义分割技术去除动态特征点,显著提升了动态场景下的位姿估计精度。

2401_87345388的博客 1940

Python中生成器与迭代器的区别与联系

Python中易混淆概念的理解一、生成器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、生成器 先看一下以...

qq_39806164的博客 576

【学习系列】SAP RAP 8:行为定义-Authorization Control

本文介绍了SAP RAP中的授权控制实现方法,主要分为读取操作和修改操作两种场景。读取操作通过ABAP CDS的数据控制语言(DCL)实现,使用访问控制对象限制数据可见范围;修改操作则通过行为定义中的权限检查,包括全局授权、实例授权和预检查三种方式。文章详细说明了如何使用DCL创建访问控制规则,并通过实例演示了全局授权和实例授权的代码实现方法,以及预检查功能在数据更新前的权限验证。这些授权控制机制共同确保用户只能访问和操作其权限范围内的数据,有效保障系统安全性。

DeveloperMrMeng的博客 436

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

算法大师! 793

python迭代器和生成器

帮助大家深入了解迭代器与生成器

qq_52758588的博客 1万+

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5877

python迭代器与生成器的区别

迭代器与生成器的区别:

yekuishu的专栏 5654

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

【毕设护航】从0构建YOLOv8犬类识别系统,120种犬类精准检测+可视化界面全流程指南

本文介绍了一个基于YOLOv8的120种犬类目标检测与可视化系统毕业设计项目。该项目使用Stanford Dogs数据集,将图像分类任务转化为目标检测任务。主要内容包括:数据预处理(XML标注转换为YOLO格式)、YOLOv8模型训练与测试(包含训练脚本编写和推理实现),以及基于Tkinter的图形界面开发。该项目技术链条完整,涵盖检测、分割等多任务支持,适合作为计算机视觉方向的毕业设计选题,兼具技术深度和展示效果。

LXY_LOVE36的博客 96

Python 迭代器和生成器:深入理解与应用

数据,避免一次性生成大量数据占用过多内存。理解和掌握迭代器与生成器对于编写高效、简洁且易于维护的 Python 代码至关重要。可以用来创建生成器对象,它能够在需要时生成数据,而不是一次性生成所有数据并存储在内存中。,它使用更简洁的语法来创建迭代器。生成器函数(使用yield。提供了高效、灵活且优雅的方式。的访问方式,而无需暴露容器的内部结构。是两个非常重要的概念,它们为处理。任何包含这两个方法的对象都可以。(如列表、元组、字典等)时提供。容器中的元素,而生成器则可以。在 Python 编程中,

2301_81718046的博客 2581

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024 (以YOLO26最新目标检测模型为基础,融合C3k2_DEConv创新模块进行改进)

2502_91881744的博客 310

详解 Python 生成器与迭代器 及其区别

不论是初学python还是进阶,这都是绕不开的知识点,生成器与迭代器的概念相较于其他基础概念显得晦涩难懂,知识点囊括很多方面,查阅越多的资料,头就越大,现在这加以理解归纳总结。

Yy_Rose的博客 8439

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python生成器和迭代器区别

一、生成器 1.1 什么是生成器 generator:一边生成一边计算后面元素的机制,称为生成器,生成器里面保存的是算法,只有需要用到才会计算后面的值 1.2 通过列表生成式创建生成器 我们可以将列表生成式的中括号改成小括号就创建了一个生成器 list = [i for i in range(10)] print(type(list)) # <class 'list'> ...

李俊的博客 3789

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python 迭代器与生成器的区别

先说结论: ① 所有的生成器都是迭代器. ② 迭代器(iterator)用类实现, 生成器(generator)用函数实现 Python 中任意的对象,只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象(如: tuple, list, dict) 1.迭代器 迭代器的实现是基于类, 要使得类的实例是一个生成器, 需要满足2个条件. 定义一个__iter__方法, 内容要 return self...

be5yond的博客 8140

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python可迭代对象,迭代器,生成器的区别

本篇文章简单谈谈Python中可迭代对象,迭代器和生成器之间的关系。刚开始我认为这两者是等同的,但后来发现并不是这样;直接抛出结论: 可迭代对象包含迭代器。 如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。 定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。 生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和next方法),不需要手动实现两方法。 生成器在迭代的过程中可以改变当前迭代值

Nxin的小抄本 3万+

python中生成器与迭代器到底有什么区别?一文带你彻底搞清楚

目录前言迭代器生成器二者区别生成器的巧妙使用后记 前言 为什么会有这篇文章? 今天我的同事w君问我,你知道生成器和迭代器的区别吗。我一时不怎么能说清楚,这时候网上搜一些文章,发现写的大都是介绍两种,而并没有过多解释区别。 经过自己一般翻阅资料及理解与探索,我觉得这篇文章是可以解释清楚两种对象的区别的。 当然在介绍区别之前,我也帮大家回忆一下迭代器与生成器的定义。 迭代器 我们先来看一段代码 list1 = [1,2,3] for i in list1: print(i) 1 2 3 这是初学者也

达达的博客 2万+

Python中生成器和迭代器的区别

Python中生成器和迭代器的区别:

IT晓可程序员之路 4万+

python迭代器和生成器区别是什么

迭代器在调用next()函数或for循环中,所有值被返回,没有其他过程或动作。生成器在调用next()函数或for循环中,所有过程被执行,且返回值。生成器是通过函数的形式中调用 yield 或()的形式创建的。迭代器可以通过 iter() 内置函数创建。生成器是一种特殊的迭代器。

hakesashou的博客 561

python生成器与迭代器的区别_python 迭代器与生成器 区别

不错的讲解,生成器是一类特殊的迭代器,在循环遍历自定义容器对象时,会使用python内置函数iter()调用遍历对象的_iter_(self)获得一个迭代器,之后再循环对这个迭代器使用next()调用迭代器对象的_next_(self) 。python中生成器和迭代器的区别(代码在Python3.5下测试):迭代器定义:对于list、string、tuple、dict等这些容器对象,使用for循环...

weixin_39950824的博客 279

Python中迭代器和生成器的区别

迭代器(Iterator)」__iter__()和__next__()。__iter__()方法返回迭代器对象本身。__next__()方法返回序列中的下一个值,如果没有更多元素则抛出异常。迭代器可以通过定义类实现,也可以使用内置函数iter()将一个可迭代对象(如列表、元组等)转换为迭代器。「生成器(Generator)」生成器是一种特殊的迭代器,由使用yield关键字的函数生成。生成器函数在调用时返回一个生成器对象,该对象只能用于迭代操作。yield。

wang15510689957的博客 749

python生成器和迭代器区别_Python_生成器和迭代器的区别

迭代器和生成器的区别是什么?这个问题面试的时候经常作为灵魂拷问。今天一起从概念到代码梳理一遍,作为总结和记录。区别是:生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。基础概念迭代:当创建的对象可以被一个接一个读取里面的值,叫迭代。列表、元组、字典、字符串都是可迭代对象。数字、布尔值是不可迭代的对象。迭代器协议:对象需要提供next()...

weixin_39805732的博客 232

Python迭代器和生成器的区别

迭代是一种操作,比如说 for 循环,逐个获取数据的这个过程就叫做迭代。

weixin_52245535的博客 786

python生成器与迭代器的区别_python生成器和迭代器的区别

匿名用户1级2016-10-13 回答迭代器和生成器都是Python中特有的概念,迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义了__iter__()方法的对象,而一个迭代器必须是定义了__iter__()方法和next()方法的对象。生成器的概念要比迭代器稍显复杂,因为生成器是能够返回一个迭代器的函数,其最大的作用是将输入对象返回...

weixin_36212459的博客 2659

python 迭代器和生成器的区别

目的:区分迭代器和生成器。生成器属于一种惰性计算;属于生成器的不一定是迭代器,属于迭代器的一定是生产器; 迭代器可以next()函数进行访问,生产器通过for进行访问遍历。 # 一维情况下做赋值操作 # 生成器 从开头 ,Next,用于惰性计算 # 无任何生成初始化的开销,省内存, 用到了才计算,未用到,不计算 # yield 可控多线程 import time def func_test...

因每天学习而伟大 828
上一篇: 卷积层和池化层总结
下一篇: python实用技巧总结
Fighting_1997
博客等级 码龄7年 3万+粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值