您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

如何在 Python 中使用生成器和迭代器?

时间:2023-03-02 10:49:34  来源:  作者:MikoAndCody

Python/ target=_blank class=infotextkey>Python 是一种流行的多功能编程语言,广泛用于各种应用程序,从 Web 开发和数据分析到机器学习和科学计算。该语言最强大的功能之一是它能够与生成器和迭代器一起工作,这提供了一种方便有效的方法来处理各种上下文中的大量数据。

 

在本文中,我们将探讨 Python 中的生成器和迭代器是什么、它们的工作原理以及您可能希望在代码中使用它们的原因。我们还将提供一些简单和复杂的用例来演示这些功能的多功能性。

Python 中的生成器和迭代器是什么?

在 Python 中,迭代器是一个可以迭代(循环)的对象,这意味着它可以在 for 循环中使用。迭代器是一个实现了迭代器协议的对象,迭代器协议要求它提供两个方法:iter()和next()。iter() 方法返回迭代器对象本身,而 next() 方法返回迭代序列中的下一个值。如果没有更多的项目要返回, next() 方法应该引发 StopIteration 异常。

另一方面,生成器是一种特殊类型的迭代器,它是使用函数而不是类定义的。生成器函数是一种包含一个或多个 yield 语句的函数,这些语句会暂时暂停执行并为调用者生成一个值。当再次调用生成器函数时,执行会从中断处恢复,并记住生成器函数的最后状态。这使得动态生成一系列值变得容易,而无需预先计算所有值。

为什么使用生成器和迭代器?

生成器和迭代器在各种上下文中都很有用,因为它们提供了一种高效且内存友好的方式来处理大量数据。通过即时生成值或分块迭代大型数据集,您可以避免一次将整个数据集加载到内存中,这对于非常大的数据集来说是不切实际甚至不可能的。

生成器和迭代器对于处理无限或非常大的数据集也很有用,例如来自传感器的流数据或实时处理日志文件。通过在需要用到数据的时候生成或迭代数据,您可以避免一次将所有数据存储在内存中。

生成器和迭代器的用例

让我们看一下 Python 中生成器和迭代器的一些简单和复杂的用例:

  • 生成数字序列:生成器最简单的用例之一是生成数字序列。这是一个例子:
def generate_numbers(n):
    for i in range(n):
        yield i

for number in generate_numbers(10):
    print(number)

在此示例中,generate_numbers() 函数使用 for 循环和 yield 语句生成从 0 到 n-1 的数字序列。调用该函数时,它会返回一个迭代器,该迭代器可用于 for 循环以即时生成数字。这比使用列表或 range() 函数预先生成整个数字序列更节省内存。

  • 处理大型数据集:生成器和迭代器的另一个常见用例是分块处理大型数据集,而不是一次将整个数据集加载到内存中。这是一个例子:
def process_file(file):
    with open(file) as f:
        for line in f:
            yield line.strip()

for line in process_file('data.txt'):
    print(line)

在此示例中,process_file() 函数从文件中读取大型数据集,并使用 yield 语句逐行生成文件。调用该函数时,它会返回一个迭代器,该迭代器可用于 for 循环以处理从磁盘读取的文件行。这比一次将整个文件读入内存更节省内存,后者对于无法放入内存的非常大的文件可能会产生问题。

  • 过滤值序列:生成器和迭代器也可用于根据特定条件过滤值序列。这是一个例子:
def filter_numbers(numbers):
    for number in numbers:
        if number % 2 == 0:
            yield number

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for even_number in filter_numbers(numbers):
    print(even_number)

在此示例中,filter_numbers() 函数将数字列表作为输入,并使用 yield 语句和条件语句仅生成偶数。调用该函数时,它会返回一个迭代器,该迭代器可用于 for 循环以仅即时生成偶数。这比使用列表或 filter() 函数预先创建一个新的偶数列表更节省内存。

  • 生成无限序列:生成器也可用于生成无限序列值,例如斐波那契数列。这是一个例子:

 

在此示例中,fibonacci() 函数使用 while 循环和 yield 语句生成无限的斐波那契数列。调用该函数时,它会返回一个迭代器,该迭代器可用于 for 循环以即时生成斐波那契数列。通过检查每个数字的值并在超过 100 时跳出循环,我们可以只生成我们需要的斐波那契数列,而无需预先计算整个序列。

结论

生成器和迭代器是 Python 的强大功能,它们提供了一种方便高效的方式来处理各种上下文中的大量数据。通过即时生成值或分块迭代大型数据集,您可以避免一次将整个数据集加载到内存中,这对于非常大的数据集来说是不切实际甚至不可能的。生成器和迭代器的用例范围从简单的(例如生成数字序列)到复杂的(例如生成斐波那契数的无限序列)。了解如何使用生成器和迭代器可以帮助您在 Python 中编写更高效和内存友好的代码。



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Search: Python  点击:(8)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Search: Python  点击:(17)  评论:(0)  加入收藏
五分钟内完成个性化Python GUI计算器搭建
一、前言在本教程中,你将学习如何在Python中使用Tkinter在短短几分钟内制作自己的全功能GUI计算器。在完成本教程时,除了通常随Python标准库一起安装的Tkinter之外,不需要任何...【详细内容】
2024-01-05  Search: Python  点击:(107)  评论:(0)  加入收藏
50 条实用的编写Python 程序建议
好学编程总结的50 条实用的编写Python 程序建议,如果你要接触Python或准备要学习Python,希望对你有用。一、编程前言建议1:理解Pythonic概念,详见Python中的《Python之禅》。建...【详细内容】
2023-12-29  Search: Python  点击:(138)  评论:(0)  加入收藏
python 爬虫常用第三方库推荐
Python 是一种非常适合进行网络爬虫开发的语言,拥有丰富的第三方库和工具,可以方便快捷地实现各种爬虫需求。下面是好学编程总结的 Python 爬虫开发的一些常用步骤:1. 确定目标...【详细内容】
2023-12-29  Search: Python  点击:(86)  评论:(0)  加入收藏
使用 Python 连接 SQL Server 数据库并实时读取数据?
实时读取SQL Server数据库表并进行处理是一个常见的需求。在Python中,可以使用pyodbc库来连接SQL Server数据库,并使用pandas库来进行数据处理。下面是一个实战示例,演示如何实...【详细内容】
2023-12-28  Search: Python  点击:(92)  评论:(0)  加入收藏
Python 新手入门必学的20个开源库
Python 新手入门必学的20个开源库,今天好学编程全部整理出来了,有需要的小伙伴可以参考一下!1.requests主要功能:发起http请求做过爬虫的程序员一定知道Python的requests库,它使H...【详细内容】
2023-12-27  Search: Python  点击:(89)  评论:(0)  加入收藏
Python Selenium实现自动化测试及Chrome驱动使用!
本文将介绍如何使用Python Selenium库实现自动化测试,并详细记录了Chrome驱动的使用方法。通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。并了解如何...【详细内容】
2023-12-25  Search: Python  点击:(129)  评论:(0)  加入收藏
Python 的 match 有点好用,推荐试试
Match 和 switch 都是控制流语句,但它们在语法和用法上有一些区别。(1) 语法: switch 语句通常在其他编程语言中使用,如 C、C++、Java 等。它的语法通常是 switch(expression)...【详细内容】
2023-12-18  Search: Python  点击:(123)  评论:(0)  加入收藏
5 个让日常编码更简单的 Python 库
如果曾经在 Python 中使用过 subprocess 库,那么我们很有可能对它感到失望,它不是最直观的库,可能还有些复杂,并且很难处理底层系统调用的输出。但是 sh 库结束了低效使用子进程...【详细内容】
2023-12-14  Search: Python  点击:(156)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(3)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(2)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(8)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(17)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(33)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(34)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(35)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(87)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(88)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(59)  评论:(0)  加入收藏
站内最新
站内热门
站内头条