python迭代器、生成器案例解析

6、Python 迭代器与生成器全解析 本博客全面解析了 Python 中的迭代器与生成器,涵盖基础概念、自定义迭代器实现、生成器函数的使用、深度优先遍历、反向迭代、带有额外状态的生成器、迭代器的高级操作(如切片、跳过元素、组合和排列)、多序列迭代、嵌套序列展平、排序合并等。通过丰富代码示例展示了如何利用这些特性高效处理复杂迭代任务,并结合实际案例分析了日志文件处理、数据清洗等应用场景。内容还总结了各类迭代方法的适用场景及性能优化策略,帮助开发者更好地掌握 Python 迭代机制。 阅读详情

1、迭代器 iterator

本质:一个实现了iter方法和next方法的对象

可迭对象iteration:

        list、dict、str、tuple、set是可迭代对象但不是迭代器;

        文件是可迭代对象也是迭代器;

        可迭代对象转为迭代器:从collections中导入模块Iterator,使用 iter(“可迭代对象”)方法

2、迭代器使用条件及特点

        a. 当a 传数据到 b 中 、或是爬虫时从a 采集下来放到b中 然后进行存储;

        b.如果把所有数据丢到列表中 然后再给b 可以 优点 速度快 缺点 列表占内存太大,如果使用迭代器申请固定的空间也就是一个个给到 b 能节约内存,但是浪费时间;

        c.需要用类来写迭代器,需要重写 _ _iter_ _( ) 和 _ _next_ _( )方法;

        d.迭代器最大的特点是,需要用类来写,显得代码冗长,不太方便。

3、迭代器案例展示

class Demo():
    def __init__(self,sum):
        self.sum=sum
        self.n=0
        self.num1=self.num2=1
    # 只要重写了这个魔术方法,这个对象就不是普通的对象了 而是可迭代对象
    def __iter__(self):
        return self

    def __next__(self):
        self.n +=1
        if self.n <= self.sum:
            temp=self.num1
            self.num1 ,self.num2=self.num2,self.num1+self.num2
            return temp
        else:
            raise StopIteration
if __name__ == '__main__':
    feiboo=Demo(10)
    # 内置方法 iter 能够获取到一个可迭代对象的迭代器,demo 就是个迭代器
    iter1=iter(feiboo)
    # 每次只能取一个  因为只是申请了固定的空间
    print(next(iter1))
    print(next(iter1))
    print('='*20)

4、生成器 general

    本质:使用yield返回值函数,使用yield会暂停,使用next()或send()函数恢复;
    yield:是生成器特有的,yield可以看做是return返回的一个值并记录这个返回的位置,下一次迭代会从这个位置开始;
    send和next的区别:send可传递参数给yield表达式,send可以强行修改上一个yield表到式的值

5、生成器案例展示:

def Feibnacci(num):
    count,num1,num2=0,1,1
    while count < num:
        count +=1
        # 生成器特有关键字yield
        yield num1
        num1,num2=num2,num1+num2

f= Feibnacci(100)
print(next(f))
print(next(f))
print(next(f))
print(next(f))

6、总结

        a.凡是可作用于for循环的对象都是Iterable类型;

        b.凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

        c.集合数据类型如list、dict、str等是Iterable但不是Iterator(迭代器),不过可以通过iter()函数获得一个Iterator对象。

        d.生成器是一种特殊的迭代器

C#开发医学影像胶片打印系统(一):万能花式布局的实现思路 本篇文章将介绍开发医学影像胶片打印系统(printscu模式)遇到不规则排版时的一种思路,一般来讲,医院打印胶片时都是整张胶片打印,但有时需要将多个病人或一个病人的多个检查打印在同一张胶片上,这时候就需要不规则排版来满足打印需求,使胶片利用率最大化。 阅读详情

相关推荐

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4562

生成器案例

生成器案例 【一】源码 def add(n, i): return n + i def test(): for i in range(4): yield i g = test() for n in [1, 10, 11]: g = (add(n, i) for i in g) res = list(g) print(res) 待选项 ...

Chimengmeng的博客 180

从零构建DDS信号发生器:STM32 DAC与DMA的完美交响

本文详细介绍了如何利用STM32的DAC模块和DMA控制器从零构建高性能DDS信号发生器。通过深入解析DDS技术原理、STM32 DAC特性及DMA高效数据传输,提供了完整的波形生成算法、硬件电路设计和软件实现方案,帮助开发者掌握数字信号合成的核心技术。

tree8的博客 705

Python生成器应用实例

生成器函数 *包含yield语句的生成器函数调用后,生成生成器对象的时候,生成器函数的函数体不会立即执行 *next(generator) 会从函数的当前位置向后执行到之后碰到的第一个yield语句,会弹出值,并暂停 函数执行 *再次调用next函数,和上一条一样的处理过程 *继续调用next函数,生成器函数如果结束执行了(显式或隐式调用了return语句),会抛出 *StopIteration异常 应用 1、无限循环 def counter(): i = 0 while True: i += 1

yjsww0707的博客 405

华为云CodeHub保姆级教程:从零开始,5分钟搞定本地代码上传(含常见报错解决)

本文提供华为云CodeHub的保姆级教程,从零开始5分钟完成本地代码上传,涵盖环境准备、仓库创建、远程连接及常见报错解决。特别适合新手开发者快速掌握Git命令与云端协作流程,确保代码安全高效上传。

weixin_30443075的博客 480

NVIDIA驱动装好了,Gazebo为啥还是卡?手把手教你用optirun搞定GPU加速

本文详细解析了NVIDIA驱动安装后Gazebo仍卡顿的原因,并提供三步精准诊断与GPU加速实战方案。通过optirun快速启用GPU加速,解决OpenGL与显示服务器的配置问题,显著提升仿真性能。适用于ROS、PX4等开发环境,帮助用户充分利用显卡性能。

weixin_30379531的博客 465

基于AI的案例研究生成器:从原理到实践的技术实现

在数字化转型浪潮中,自动化文档生成技术正成为提升工作效率的关键工具。其核心原理是通过结构化数据与自然语言处理模型的结合,将复杂的写作任务转化为可编程的流程。从技术实现角度看,这涉及提示工程、API集成和模板化输出等多个环节。该技术的核心价值在于显著降低高质量技术文档的创作门槛,让开发者能够专注于核心逻辑而非格式调整。在实际应用场景中,这类工具特别适合项目复盘、技术方案展示和知识沉淀等场景。本文探讨的案例研究生成器,正是利用大语言模型和Streamlit框架,实现了从信息收集到格式化输出的完整工作流,其中提示

weixin_28727943的博客 578

MEMS传感器技术深度解析:从原理到未来趋势的全面指南(智能驾驶赛道有戏)

在智能汽车每秒产生1GB数据的今天,在可穿戴设备厚度突破1毫米的极限挑战下,MEMS(微机电系统)传感器正以的三大核心优势,重塑着人类感知世界的方式。作为从业10年的MEMS工程师,我见证了这个领域从实验室走向量产的完整历程——从2005年汽车安全气囊中笨重的压阻式加速度计,到2025年智能手机中集成5种传感器的SoC芯片,MEMS技术正在书写传感器行业的摩尔定律新篇章。本文将带您穿透技术迷雾,深入解析MEMS传感器的技术密码,涵盖,并附独家整理的与。文末更提供,助您把握万亿级市场机遇。

优快云-新能源汽车研发测试专业博主 2300

有关生成器的实际案例

通过几个生成器的案例,可以对生成器有更加深刻的了解。 案例1 简单聊天机器人的实现 案例代码如下: def chat_robot(): """ 聊天机器人 """ # 这个变量存储的是机器人给用户的响应信息; response = '' # 死循环 while True: # receive: 接收用户给机器人传过来的...

Mr_fengzi的博客 470

达摩院高清人像美肤模型ABPN的深入解析及编程实现

本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。

TechPulseZ的博客 711

YOLOv13改进策略【特征提取层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov13精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 360

12个好玩又实用的Python迭代器和生成器实例

今天我们要来一场编程奇趣之旅,一起揭秘那些既让代码变得更简洁高效,又能带你领略Python魅力的12个迭代器和生成器实例。别担心,我会用轻松易懂的语言帮你掌握这些小技巧,准备好你的笔记本,咱们这就开始!瞧,通过这12个生动有趣的例子,我们展示了Python迭代器和生成器如何让编程变得既好玩又实用。下次编写代码时,不妨试试它们,让你的程序更加智能和高效吧!利用生成器特性创建斐波那契数列,只计算你需要的项,而不一次性生成所有值。当你需要自己设计一个迭代器时,只需定义这两个特殊方法,赋予对象迭代能力。

wenjie20070212的博客 822

10分钟搞定manim安装与vscode配置

manim安装与vscode配置

帅帅de三叔 3411

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

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

IT晓可程序员之路 4万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

07. Python中的迭代器和生成器

1. 迭代器 通过迭代器,能够完成数据的生成,而且不需要很大的存储空间 1.1. 列表的方式和迭代器的最核心的区别 列表中存储的是数据的结果,而迭代器中存储的是生成数据的方式 2. 生成器 生成器是一类特殊的迭代器 2.1. 创建生成器的方法1 把一个列表生成式的 [ ] 改成 ( ) L = [ x*2 for x in range(5)] G = ( x*2 for x in range(...

262

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

0730_迭代器、生成器、装饰器、闭包

文章目录迭代器可迭代对象:迭代器协议应用场景生成器生成器函数闭包装饰器 迭代器 可迭代对象: list,str,tuple,etc. —> for … in … 遍历 (迭代) 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起StopIteration 异常,以终止迭代(只能往下走,不可以回退) 现在,我们就可以说,实现了迭代器协议的对象就是可迭代对象 ...

Joe0407的博客 236

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python 生成器和迭代器

https://blog.youkuaiyun.com/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是pyth...

weixin_34364135的博客 108

3.2 Python 迭代器与生成器的底层原理

Python中的迭代器与生成器 迭代器和生成器是Python实现惰性计算的核心工具,能够高效处理大数据或流式数据。迭代器通过__iter__和__next__方法实现按需访问,而生成器通过yield关键字更简洁地实现相同功能,自动保存状态。两者都支持for循环和next()调用,但生成器代码更简洁、内存效率更高。生成器还支持.send()传值和.throw()异常处理等高级特性。性能测试表明生成器执行更快、内存占用更少,特别适合处理大型数据集或无限序列。这些特性使它们成为Python高效编程的重要组成部分。

ylumwd的博客 772

迭代器与生成器

一、迭代器 1、什么是迭代器协议 1、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stopiteration异常,以终止迭代。(只能往后走不能往前退) 2、可迭代对象:实现了迭代器协议的对象。(如何实现:对象内部定义了一个__iter__()方法) 3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循...

93

python中的迭代器

(1) 概念 所有可以用来执行“循环”操作的对象都必须是可迭代对象Iterable,即这类对象每次返回一个成员(元素)。 基于Iterable,又衍生了Iterator和Generator两个数据结构。 (2) 迭代器存在的原因: 一言以蔽之就是节省内存,如果需要遍历一个很大的list, 内存不用开辟很大的一片空间来装整个list, 只需要分配list中一个元素大小的空间(假设list中每个元素所占内存大小一一样)即可。 (3) 设计思路: 1) Iterable可迭代对象 1] feature 拥有

大海中的游鱼 342

再谈迭代器,生成器,yield,及和类的使用

再谈迭代器,生成器,yield,及和类的使用最近写项目时,遇到类嵌套和yield的混合使用,正好借此加深对迭代器和生成器的理解。代码代码抽象如下:from types import FunctionType class RowItems(object): def __init__(self,option,x1,x2,x3): self.option = option

Ayhan_huang的博客 866

迭代器生成器生成式

迭代器 什么是迭代器 器 => 工具 迭代: 是一个重复的过程,但每次重复都是基于上一次的结果而来的 **迭代器:**就是一种不依赖于索引的取值工具 特性: 1.是一种通用的迭代取值方案 2.惰性计算,节省内存 为何要有迭代器 # 对于序列类型 str,list,tuple可以依赖索引来迭代取值 # 对于dict,set,文件 python必须为我们提供一种不依赖于索引的迭代取值的方式=》迭代器 可迭代对象:(内置有obj.__iter__()方法) name='egon' lis=[1,2,3

qq_37719875的博客 273

迭代器和生成器

一. python的迭代协议   1.什么是迭代器:     迭代器是访问集合内数据的一种方式,一般是用来遍历数据的       2.迭代器和以下标访问的方式不一样,迭代器是不能返回的,且迭代器提供了一种惰性访问数据的方式   3.python中可迭代的对象基本都是实现了__iter__魔法函数的,迭代协议实质上就是满足__iter__魔法函数 可迭代类型 迭代器 fro...

weixin_33849942的博客 100

生成器与迭代器

1.概念解释 list_a= [i for i in range(10)] # 列表推导式 g = (i for i in range(10)) # 生成器表达式 迭代(iteration):在一个可迭代对象中依次取出元素的过程, 可理解为遍历。 可迭代对象(Iterable):实现了迭代器协议的对象。可以通过for i in x的形式获取元素,定义了__i...

weixin_30660027的博客 76

Python生成器与迭代器深度解析

掌握生成器的高级特性如send()、throw()和yield from,可以构建更加灵活和强大的数据处理管道。print(f"列表大小: {sys.getsizeof(list_comp)} 字节")print(f"生成器大小: {sys.getsizeof(gen_exp)} 字节")gen.send("Hello") # 输出: 收到: Hello。gen.send("World") # 输出: 收到: World。print(f"处理: {value}")print(f"捕获异常: {e}")

qq360737395的博客 247
上一篇: python中os文件操作模块,案例解析
下一篇: python办公自动化——批量合并工作簿案例
continue_v
博客等级 码龄5年 17粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值