Python基础教程(八):迭代器与生成器编程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章

💝💝💝关注!关注!!请关注!!!您的支持是我不断创作的最大动力!!!

文章目录

    • 一、迭代器基础
      • 1.1 迭代器的概念
      • 1.2 创建迭代器
    • 二、生成器简介
      • 2.1 生成器的概念
      • 2.2 创建生成器
      • 2.3 生成器表达式
    • 三、迭代器与生成器的优缺点
      • 3.1 优点
      • 3.2 缺点
    • 四、实战案例
    • 五、总结
    • 结束语

在 Python 编程中,迭代器(Iterator)和生成器(Generator)是处理大量数据集时的重要概念。它们不仅能够提高代码的执行效率,还能让程序变得更加简洁和易于维护。本文将深入探讨迭代器和生成器的工作原理,以及如何在实际编程中应用它们。

一、迭代器基础

1.1 迭代器的概念

迭代器是一种可以记住遍历的位置的对象。在 Python 中,任何实现了 __iter__()__next__() 方法的对象都可以被称为迭代器。__iter__() 方法返回迭代器本身,而 __next__() 方法则返回序列中的下一个项目。当没有更多的项目时,它会抛出 StopIteration 异常。

1.2 创建迭代器

我们可以自定义一个类来实现迭代器接口:

class Counter:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.end:
            current_value = self.current
            self.current += 1
            return current_value
        else:
            raise StopIteration()

# 使用自定义迭代器
for num in Counter(0, 5):
    print(num)

二、生成器简介

2.1 生成器的概念

生成器是一种特殊的迭代器,它使用关键字 yield 来产生一系列的值。与普通函数不同,生成器函数在每次遇到 yield 语句时都会暂停执行并返回一个值,当再次迭代时,它会从上次停止的地方继续执行。

2.2 创建生成器

生成器可以通过简单的函数来创建,只需在函数体中使用 yield 语句即可:

def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()
for i in gen:
    print(i)

2.3 生成器表达式

类似于列表推导式,Python 也支持生成器表达式,它是一种更简洁地创建生成器的方式:

squares = (x**2 for x in range(10))
for square in squares:
    print(square)

三、迭代器与生成器的优缺点

3.1 优点

  • 内存效率:生成器在迭代过程中逐个生成元素,因此对于大数据集而言,它们比一次性加载所有数据到内存中的列表更加节省资源。
  • 延迟计算:生成器只在需要时才计算下一个值,这在处理需要昂贵计算的大型数据流时特别有用。

3.2 缺点

  • 无法随机访问:一旦生成器开始迭代,就无法直接访问序列中的特定项。
  • 只能遍历一次:生成器一旦被消耗,就不能再次使用。

四、实战案例

假设我们需要从一个大文件中读取每一行并进行处理,下面是如何使用生成器来优化这一过程:

def read_large_file(file_object):
    while True:
        data = file_object.readline()
        if not data:
            break
        yield data

with open('largefile.txt', 'r') as file:
    for line in read_large_file(file):
        process(line)  # 自定义的处理函数

在这个例子中,read_large_file 是一个生成器函数,它逐行读取文件而不是一次性读取整个文件,这样可以显著减少内存使用。

五、总结

迭代器和生成器是 Python 中处理数据流和序列的强大工具。通过理解和应用这些概念,你可以编写出更高效、更优雅的代码。希望本文能帮助你更好地掌握迭代器和生成器的使用,从而在实际项目中发挥它们的优势。

在后续的学习和实践中,尝试在适合的场景下使用生成器和迭代器,你将发现它们能够极大地简化代码并提高性能。


结束语

❤️❤️❤️ 喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧
❤️❤️❤️请大家记得订阅我的专栏【Python系列】哟❤️❤️❤️

python相关文章索引文章链接
Python基础语法(一):标识符与保留字部分Python基础语法(一):标识符与保留字部分
Python基础语法(二):数据类型Python基础语法(二):数据类型
Python基础语法(三):运算符Python基础语法(三):运算符
Python基础语法(四):条件控制Python基础语法(四):条件控制
Python基础语法(五):循环语句Python基础语法(五):循环语句
Python基础语法(六):推导式编程Python基础语法(六):推导式编程
Python基础教程(七):函数编程-从基础到进阶Python基础教程(七):函数编程-从基础到进阶

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/696221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Buildroot和Debian文件系统修改方法

本文档主要介绍在没有编译环境的情况下&#xff0c;如何修改buildroot和debian文件系统方法&#xff0c;如在buildroot文件系统中添加文件、修改目录等文件操作&#xff0c;在debian文件系统中&#xff0c;安装软件库、工具、扩大文件系统空间等等操作。 1.Debian文件系统 …

【Python从入门到进阶】57、Pandas入门:背景、应用场景与基本操作

一、引言 1、Pandas简介 在数字化时代&#xff0c;数据已经成为企业决策和个人洞察的重要基础。无论是金融市场的波动、零售业的销售趋势&#xff0c;还是科研实验的结果&#xff0c;都蕴含在大量的数据之中。然而&#xff0c;如何有效地提取、分析和解读这些数据&#xff0c…

嵌入式应用之FIFO模块原理与实现

FIFO介绍与原理 FIFO是First-In First-Out的缩写&#xff0c;它是一个具有先入先出特点的缓冲区。FIFO在嵌入式应用的非常广泛&#xff0c;可以说有数据收发的地方&#xff0c;基本就有FIFO的存在。或者为了降低CPU负担&#xff0c;提高数据处理效率&#xff0c;可以在积累到一…

2、数据操作

索引从0开始 一行 [1,:] 一列[:,1] 子区域&#xff1a;[1:3,1:] 第一行和第二行&#xff0c;从第一列开始 [::3,::2] 每3行一跳&#xff0c;每2列一跳 torch.tensor([[1,2,3,4]] 按位置算 xy ,x-y x*y x**y&#xff08;幂&#xff09; 1、广播机制形状不一样&#xff0c;…

一个简单好用的 C# Easing Animation 缓动动画类库

文章目录 1.类库说明2.使用步骤2.1 创建一个Windows Form 项目2.2 安装类库2.3 编码2.4 效果 3. 扩展方法3.1 MoveTo 动画3.2 使用回调函数的Color动画3.3 属性动画3.4 自定义缓动函数 4.该库支持的内置缓动函数5.代码下载 1.类库说明 App.Animations 类库是一个很精炼、好用的…

C-MAPSS数据集探索性分析

实验数据为商用模块化航空推进系统仿真C-MAPSS数据集&#xff0c;该数据集为NASA格林中心为2008年第一届预测与健康管理国际会议(PHM08)竞赛提供的引擎性能退化模拟数据集&#xff0c;数据集整体信息如下所示&#xff1a; 涡扇发动机仿真模拟模型如下图所示。 仿真建模主要针对…

【前端】使用window.print() 前端实现网页打印详细教程(含代码示例)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

Vuex3学习笔记

文章目录 1&#xff0c;入门案例辅助函数 2&#xff0c;mutations传参辅助函数 3&#xff0c;actions辅助函数 4&#xff0c;getters辅助函数 5&#xff0c;模块拆分6&#xff0c;访问子模块的state辅助函数 7&#xff0c;访问子模块的getters辅助函数 8&#xff0c;访问子模块…

Java--递归

1.递归就是A方法调用A方法&#xff0c;也就是调用自己本身 2.利用递归可以用简单的程序来解决一些复杂的问题&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可描述出解题过程所需要的多次重复…

【MySQL数据库】:MySQL索引特性

目录 索引的概念 磁盘 磁盘的基本特征 MySQL与磁盘交互的基本单位 索引的理解 建立测试表 理解单个Page 理解多个Page 页目录 单页情况 多页情况 索引的数据结构 聚簇索引 VS 非聚簇索引 索引操作 创建主键索引 创建唯一索引 创建普通索引 创建全文索引 查询…

Nginx服务配置

一、Nginx服务的主配置文件nginx.conf vim /usr/local/nginx/conf/nginx.conf 全局块&#xff1a;全局配置&#xff0c;对全局生效&#xff1b;events块&#xff1a;配置影响 Nginx 服务器与用户的网络连接&#xff1b;http块&#xff1a;配置代理&#xff0c;缓存&#xff0c…

重温共射放大电路

1、放大概念 小功率信号变成一个大功率信号&#xff0c;需要一个核心器件做这件事&#xff0c;核心器件的能量由电源提供&#xff0c;通过核心器件用小功率的信号去控制大电源&#xff0c;来实现能量的转换和控制&#xff0c;前提是不能失真&#xff0c;可以用一系列正弦波进行…

conda 创建环境失败

conda create -n pylableimg python3.10在conda &#xff08;base&#xff09;环境下&#xff0c;创建新的环境&#xff0c;失败。 报错&#xff1a; LookupError: didn’t find info-scipy-1.11.3-py310h309d312_0 component in C:\Users\Jane.conda\pkgs\scipy-1.11.3-py310h…

RK3568-修改fiq-debugger调试串口

瑞芯微SDK默认将uart2_m0作为调试串口,以下方法将调试串口修改为uart5_m1。修改bootloader 修改/OK3568-linux-source/rkbin/tools/ddrbin_param.txt文件,5表示串口5。1表示复用m1。执行./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.11.bin命令修改ub…

素数的无穷大的证明

素数的无穷大——欧几里得的证明 文章目录 一、说明二、欧几里得证据三、哥德巴赫对素数无穷性的证明&#xff08;1730&#xff09;四、Frstenberg 对素数无穷性的证明(1955)五、库默尔对欧几里得证明的重述 一、说明 众所周知&#xff0c;素数是无限多的。然而&#xff0c;两…

代码随想录算法训练营第36期DAY56

DAY56 套磁很顺利&#xff0c;发现又有书读了&#xff01; 300最长递增子序列 朴素法&#xff0c;这个好想&#xff0c;但是不对&#xff0c;比如 0 1 0 3 2 3 我的算法会找出0 1 3作为答案&#xff0c;而不是0 1 2 3 可以看出&#xff0c;后面的状态依赖于前面的状态&am…

CMake详细解读

原文来自&#xff1a;CMake 保姆级教程 视频来自B站&#xff1a;CMake 保姆级教程C/C 1、快速操作&#xff1a; 原文来自&#xff1a;在 VScode 中使用 CMake 快速创建cpp工程 首先创建一个 C/C 工程文件夹 CALC&#xff0c;用 VSCode 打开&#xff0c;目录结构如下&#x…

探索软件工程师在新能源汽车研发中的角色与贡献

随着全球对可持续发展的关注不断增加&#xff0c;新能源汽车的研发与应用成为了汽车行业的一个重要方向。作为软件工程师&#xff0c;参与新能源汽车研发不仅能够推动科技创新&#xff0c;还能为环保事业贡献力量。本文将深入探讨软件工程师在新能源汽车研发中的具体贡献、所需…

如何画系统架构图学习

原文链接:https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/%E4%BB%8E%200%20%E5%BC%80%E5%A7%8B%E5%AD%A6%E6%9E%B6%E6%9E%84/51%20%E5%A6%82%E4%BD%95%E7%94%BB%E5%87%BA%E4%BC%98%E7%A7%80%E7%9A%84%E8%BD%AF%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%9B%BE%EF…

C语言学习系列:初识C语言

前言&#xff0c;C语言是什么 语言&#xff0c;比如中文、英语、法语、德语等&#xff0c;是人与人交流的工具。 C语言也是语言&#xff0c;不过是一种特殊的语言&#xff0c;是人与计算机交流的工具。 为什么叫C语言呢&#xff1f; 这就要从C语言的历史说起了。 一&#…