Python学习:迭代器与生成器的深入解析

news2024/9/21 16:39:08

函数在Python中扮演着重要角色,不仅可以封装代码逻辑,还能通过迭代器和生成器这两种强大的技术,实现更高效的数据处理和遍历。本篇博客将深入探讨Python函数的迭代器和生成器,结合实际案例为你揭示它们的神奇,以及如何巧妙地应用迭代器和生成器来解决实际问题。

迭代器:数据的遍历之道

迭代器是Python中一种特殊的对象,它能够逐个返回数据元素,使得数据的遍历变得更加高效。

迭代器基础

numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
print(next(iterator))  # 输出:1
print(next(iterator))  # 输出:2
print(next(iterator))  # 输出:3

自定义迭代器

class SquareIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index] ** 2
        self.index += 1
        return result
numbers = [1, 2, 3, 4, 5]
square_iter = SquareIterator(numbers)
for num in square_iter:
    print(num)

在案例中,我们定义了一个自定义迭代器SquareIterator,用于将数据中的每个元素平方后返回。

生成器:延迟计算的智慧

生成器是一种更为高级的迭代器,它能够在需要时按需生成数据,实现了更高效的内存利用和数据处理。

生成器函数

def square_generator(data):
    for num in data:
        yield num ** 2
numbers = [1, 2, 3, 4, 5]
square_gen = square_generator(numbers)
for num in square_gen:
    print(num)

生成器表达式

numbers = [1, 2, 3, 4, 5]
square_gen = (num ** 2 for num in numbers)
for num in square_gen:
    print(num)

迭代器和生成器的案例:斐波那契数列

def fibonacci_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
fib_gen = fibonacci_generator()
for _ in range(10):
    print(next(fib_gen), end=" ")

在这个案例中,我们通过生成器实现了一个无限生成斐波那契数列的序列。

总结

迭代器和生成器是Python函数的两大神奇能力,能够在数据处理和遍历中发挥重要作用。本篇博客深入介绍了迭代器的基本原理、自定义迭代器以及生成器的创建和使用,结合实际案例展示了它们的威力。在实际编程中,巧妙地运用迭代器和生成器,可以使数据处理更加高效、节省内存,带你进入数据处理的新境界。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《论文阅读18》 SSD: Single Shot MultiBox Detector

一、论文 研究领域: 2D目标检测论文:SSD: Single Shot MultiBox Detector ECCV 2016 论文链接论文github 二、论文概要 SSD网络是作者Wei Liu在ECCV 2016上发表的论文。对于输入尺寸300x300的网络 使用Nvidia Titan X在VOC 2007测试集上达到74.3%mA…

无涯教程-PHP - 条件判断

if... elseif ... else和switch语句用于根据不同条件进行判断。 您可以在代码中使用条件语句来做出决定, PHP支持以下三个决策语句- if ... else语句 - 如果要在条件为真时执行,而在条件不为真时执行另一个代码,请使用此语句 els…

nodejs+vue古诗词在线测试管理系统

一开始,本文就对系统内谈到的基本知识,从整体上进行了描述,并在此基础上进行了系统分析。为了能够使本系统较好、较为完善的被设计实现出来,就必须先进行分析调查。基于之前相关的基础,在功能上,对新系统进…

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具&am…

C++ string 的用法

目录 string类string类接口函数及基本用法构造函数,析构函数及赋值重载函数元素访问相关函数operator[]atback和front 迭代器iterator容量操作size()和length()capacity()max_sizeclearemptyreserveresizeshrink_to_fit string类对象修改操作operatorpush_backappen…

vue3组件多个根节点报错

打开扩展商店搜索下载 vetur 打开设置命令面板 搜索eslint 将下面的勾选取消

Spring MVC相关异常类

Spring MVC相关异常类 使用@ResponseStatus修饰异常类使用@ExceptionHandler修饰异常处理方法 使用@ResponseStatus修饰异常类 如果希望程序抛出自定义异常时也能被异常解析器解析成HTTP状态码,从而显示Web服务器提供的错误页面&…

统一规范化,东盟区域化发展,致力于建立电动汽车生态系统

根据印尼外交部东盟经济合作司司长的透露,东盟正在致力于建立一个电动汽车生态系统,并期望得到东亚邻国的支持。具体而言,东盟计划在“APT”机制下宣布新的电动汽车生态系统合作计划,并预计在下个月举行的第 43 届东盟峰会上正式宣…

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基本介绍程…

自己实现 SpringMVC 底层机制 系列之--实现任务阶段 2- 完成客户端浏览器可以请求控制层

😀前言 本文是自己实现 SpringMVC 底层机制的第二篇之完成实现任务阶段 2- 完成客户端浏览器可以请求控制层 🏠个人主页:尘觉主页 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TabAxc96-1692497234107)(https://…

Spring MVC异常处理

Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常,当捕捉到指定的异常时,系统返回对应的…

ABBYY FineReader15最新专业的PDF OCR图片文字识别软件

ABBYY FineReader PDF15是专业的OCR图片文字识别软件,可以快速、准确、方便地将扫描纸质文件、PDF格式及数字或移动电话图像转换成可编辑格式——Microsoft Word、Excel、PowerPoint、可检索的PDF、HTML、DjVu等。99.8%的识别准确率即刻识别文本,复制和粘…

Stanley 轨迹跟踪算法研究

Stanley 轨迹跟踪算法研究 理论基础 首先还是阅读论文 《基于改进鲸鱼优化算法的Stanley算法研究》 《复杂环境下的移动机器人路径规划技术研究》 《Stanley:The Robot that Won the DARPA Grand Challenge》 《无人驾驶汽车轨迹跟随控制研究》 《基于混合算法的校园智能车路…

【kafka】-分区-消费端负载均衡

一.为什么kafka要做分区? 因为当一台机器有可能扛不住(类比:就像redis集群中的redis-cluster一样,一个master抗不住写,那么就多个master去抗写),把一个队列的单一master变成多个master&#xf…

学习嵌入式

最近,打算了解一些关于嵌入式的知识。这里先了解嵌入式到底是什么。

[ MySQL ] — 常见函数的使用

目录 日期函数 current_date — 获取当前日期 current_time — 获取当前时间 current_timestamp — 获取当前时间戳 date — 获取参数的日期部分 ​编辑 date_add — 在日期或时间的基础上进行增加 date_sub — 在日期或时间的基础上进行减少 datediff — 计算两个日期相差…

快速上手Linux核心命令:Linux系统信息相关命令

前言 这期呢主要说一说Linux中与系统相关的命令,一共包含10个命令 uname 显示系统信息 1、简介 uname命令用于显示系统相关信息,比如内核版本号、硬件架构等 2、语法格式 uname [参数选项] 3、参数说明 参数参数说明-a显示系统所有相关信息-m显示计算…

通过重构来加深理解——DDD

要想成功地开发出实用的模型,需要注意以下三点: (1)复杂巧妙的领域模型是可以实现的,也是值得我们去花费力气实现的。 (2)这样的模型离开不断的重构是很难开发出来的,重构需要领域专…

2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境

最近公司给了我一块Jetson Orin Nano的板子,先刷了系统(1.Jetson Orin Nano Developer Kit系统刷机)又让我搭建交叉编译环境,所以有了下面的文章 一 :Qt5.14.2交叉编译环境安装 1.准备 1.1设备环境 1.1.1 Server: Ubuntu20.0…

md文本学习

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…