【Python 生成器与迭代器】零基础也能轻松掌握的学习路线与参考资料

news2025/2/12 7:47:53

在这里插入图片描述

一、Python生成器与迭代器概述

Python是一种高级编程语言,其中非常重要的概念就是生成器和迭代器。Python生成器和迭代器联合使用,能够实现高效的迭代操作,避免增加额外的内存消耗,同时提高代码的可读性。Python中常见的生成器和迭代器包括:生成器表达式、迭代器函数、生成器函数等。

二、Python生成器和迭代器的启蒙

1、Python迭代器

迭代器(Iterator)是Python中的一个重要概念,它是一种特殊的对象,可以使用迭代协议(Iterator Protocol)中的next()函数来访问其元素。Python迭代器要求:有一个next()方法,迭代器要么返回下一个元素,要么抛出StopIteration异常。

迭代器通常用于处理大量数据,或者是在遍历数据时需要对数据进行操作的场合。它可以从迭代器中获取元素,每次获取一个元素后,迭代器指向下一个元素。

2、Python生成器

生成器(Generator)是Python中另一个重要的概念,它是一种特殊的迭代器,可以使用yield来定义生成器函数。生成器与迭代器的概念类似,不同的是生成器的实现方式不同于迭代器。

生成器可以使用生成器函数生成,而生成器函数是一种特殊的函数,可以使用yield关键字来暂停函数的执行,并在需要生成下一个值时恢复执行。

三、Python生成器的实现

1、生成器表达式

Python生成器表达式采用一种更加简单的方式来定义生成器。生成器表达式类似一些简单的列表推导式,只是在方括号[]中使用圆括号()来定义。

例如,我们需要生成1到10的平方值,我们可以使用以下代码:

(x**2 for x in range(1,10+1))

生成器表达式是一种快速定义生成器的方式,它可以使用简单的语法来实现生成器。

2、迭代器函数

Python中使用迭代器函数来定义迭代器。迭代器函数包括两部分:迭代器初始化与迭代器访问。

__init__()初始化方法为迭代器提供必要的参数,__next__()访问方法通过提供迭代器的当前状态来返回下一个元素。

例如,我们需要定义一个迭代从1到10的整数的迭代器,我们可以使用以下代码:

class MyIterator:
    def __init__(self, x):
        self.x = x

    def __iter__(self):
        return self

    def __next__(self):
        if self.x > 10:
            raise StopIteration
        result = self.x
        self.x += 1
        return result

3、生成器函数

生成器函数与迭代器类似,但是使用方法不同。生成器函数使用yield关键字返回生成器的下一个值。每次使用next()函数时,生成器函数都会从上次yield语句处继续执行。

例如,我们定义一个简单的生成器,生成函数可以为从1到10的整数提供平方值:

def my_gen():
    for x in range(1,11):
        yield x**2
```

在调用my_gen()函数时,生成器会返回一个生成器对象,使用next()函数来逐个获取下一个元素。

四、Python生成器和迭代器的优秀实践

1、使用生成器函数实现斐波拉契数列生成器

在Python中,斐波那契数列是一种非常常见的数列,它可以使用生成器函数来轻松地实现。斐波那契数列定义为从0和1开始,下一项是前两项的和:

def fib_gen():
a, b = 0, 1
while True:
yield b
a, b = b, a+b


在这个例子中,我们使用while循环来生成斐波那契数列,使用yield语句每次返回下一个值。

2、使用迭代器函数实现自己的range函数

在Python中,range函数返回一个迭代器,可以遍历指定范围内的整数。下面我们使用迭代器函数来定义自己的range函数:

class MyRange:
def init(self, start, end):
self.current = start
self.end = end

def __iter__(self):
    return self

def __next__(self):
    if self.current >= self.end:
        raise StopIteration
    result = self.current
    self.current += 1
    return result

在这个例子中,我们定义了__init__()函数来初始化迭代器,定义next()函数来提供迭代器的下一个元素,range自适应range()函数的功能,允许我们在for循环中使用它。

3、使用生成器表达式查找偶数

我们可以使用生成器表达式来查找一组整数中的所有偶数:

even = (x for x in range(10) if x % 2==0)
print(list(even))


在这个例子中,我们使用条件表达式来只获取偶数(%2==0)。

五、Python生成器和迭代器的参考资料

1、廖雪峰Python教程 https://www.liaoxuefeng.com/wiki/1016959663602400

2、Python官方文档 https://docs.python.org/3/library/index.html

3、Fluent Python https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008

4、Effective Python https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134853989

5、Python Cookbook https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377

六、总结

Python生成器和迭代器在编写Python程序时相当重要。了解Python生成器和迭代器的用法,可以帮助我们更好地编写高效的Python代码,减少无谓的计算和内存开销,提高代码的可读性和可维护性。本文基于Python生成器和迭代器的基础概念,介绍了生成器和迭代器的实现和应用。还介绍了一些Python生成器和迭代器的参考资料和优秀实践,以此帮助读者更好地学习和使用Python生成器和迭代器。

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

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

相关文章

单机多节点 elasticsearch 集群安全认证

es 版本:7.6.2 部署环境:CentOS Linux release 7.6.1810 (Core) 一:生成 ca 证书 cd 到 es 的安装目录,并执行下面的命令来生成 ca 证书: ./bin/elasticsearch-certutil ca Elasticsearch碰到第一个直接回车&#xf…

面试专题:Mysql

1.说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解 关于二者的对比与总结: 1.count运算上的区别:因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的…

[CKA]考试之K8s 版本升级

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 现有的Kubernetes 集群正在运行版本1.22.0。仅将master节点上的所有 Kuberne…

【Python】集合 set ② ( 集合常用操作 | 集合中添加元素 | 集合中移除元素 | 集合中随机取出元素 )

文章目录 一、集合中添加元素二、集合中移除元素三、集合中随机取出元素 在 Python 中 , 集合 set 是无序的 , 因此 集合 数据容器 不支持 使用 下标索引 访问 集合元素 ; 一、集合中添加元素 调用 集合#add(新元素) 函数 , 可以将新元素添加到 集合 数据容器中 ; 集合添加元素…

Vue- ref属性

ref属性 被用来给元素或者子组件注册引用信息(id的替代者) 通过案例来演示_ref属性 1 编写案例 如图:有一个按钮,点击按钮可以输出dom元素 备注:虽然vue不用我们亲自操作dom,但是有的特殊的情况下就要…

【2023华中杯】B题 小学教学应用题 相似性度量及难度评估 29页论文及MATLAB代码

1 题目 B 题 小学数学应用题相似性度量及难度评估 某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息,并且课后会自…

【Pytest实战】解决ModuleNotFoundError: No module named ‘pytest’问题

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

JAVA程序的性能优化实践总结

1、 衡量程序性能的指标 可以从常用的性能评估指标入手: 并发:同一时间有多少请求访问TPS:transaction per second(每秒的事物数)QPS:query per second(每秒请求数)耗时:端到端耗时,服务端耗时&#xff…

并行计算——MPI编程

目录 基础知识 进程与线程,并行与并发 奇偶排序 MPI实现 odd-even sort 思路 环境部署 编程实现(C) “若干”的问题 参考链接 一个偶然的机会,我接触到了国立清华大学的MPI编程作业,也就接触到了并行计算。这…

基于Python3接口自动化测试初探

自动化测试是什么? 自动化测试简单来说就是借助工具的方式来辅助手动测试的行为就可以看做是自动化测试。 自动化测试工具有哪些? 现在常用的自动化测试工具包括: QTP:主要用于回归测试和测试同一软件的新版本 Robot Framewor…

大数据ETL工具Kettle

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言最近公司在搞大数据数字化,有MES,CIM,WorkFlow等等N多的系统,不同的数据源DB,需要将这些不同的数据源DB里的数据进行整治统一…

【算法】模拟,高精度

高精度加法 P1601 AB Problem(高精) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路就是模拟,值得注意的就是要用字符串类型输入。存进自己的int数组时要倒着存,因为如果是正着存的话,进位会有点trouble。 时间…

Spread.NET v16.0.20222.0 ASP.NET cRACK

关于 Spread.NET 提供类似 Excel 的电子表格体验。 Spread.NET 可帮助您创建电子表格、网格、仪表板和表单。它包括一个强大的计算引擎,具有450 函数以及导入和导出Excel电子表格的能力。利用广泛的 .NET 电子表格 API 和强大的计算引擎来创建分析、预算、仪表板、…

【C++ 基础篇:24】:【重要模板】C++ 输入输出运算符重载【以 Date 日期类为例】

系列文章说明 本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大…

Mysql Access denied for user ‘root‘@ ‘*.*.*.*‘ (using password: YES)异常处理

目录 一、异常错误二、原因三、解决方法 一、异常错误 PS C:\Users\10568> mysql -u root -p Enter password: **** ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)Access denied表示拒绝访问,using password:NO/…

计算机视觉 | 语义分割与Segmentation

前 言 「MMSegmentation」 是一个基于 PyTorch 的语义分割开源工具箱。它是 OpenMMLab 项目的一部分。 MMSegmentation v1.x 在 0.x 版本的基础上有了显著的提升,提供了更加灵活和功能丰富的体验。 主要特性 统一的基准平台 我们将各种各样的语义分割算法集成到了…

Linux权限维持

SSH后门&VIM后门 ssh后门: 创建一个软链接: ln -sf /usr/sbin/sshd /tmp/su 拓展:软链接相当于一个快捷键,硬链接相当于一个指针指向文件地址,也类似于复制 开启后门: /tmp/su -oport12345 开启后…

chatgpt赋能python:Python另存为:如何保存你的程序代码

Python另存为:如何保存你的程序代码 简介 Python是一种高级编程语言,最初由Guido van Rossum于1991年创建。自创建以来,Python已被广泛应用于Web开发、数据分析、人工智能等领域。作为一名有10年Python编程经验的工程师,我发现在…

万物的算法日记|第一天

笔者自述: 一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结&am…

内部服务器端口映射实验:打通内外网络,实现公网访问内部服务

内部服务器端口映射实验:打通内外网络,实现公网访问内部服务 【实验目的】 部署服务器地址转换。熟悉服务器地址转换的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩…