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

news/2024/11/30 9:39:50/

在这里插入图片描述

一、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 = xdef __iter__(self):return selfdef __next__(self):if self.x > 10:raise StopIterationresult = self.xself.x += 1return 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 selfdef __next__(self):if self.current >= self.end:raise StopIterationresult = self.currentself.current += 1return 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/10169596636024002、Python官方文档 https://docs.python.org/3/library/index.html3、Fluent Python https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/14919460084、Effective Python https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/01348539895、Python Cookbook https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377六、总结Python生成器和迭代器在编写Python程序时相当重要。了解Python生成器和迭代器的用法,可以帮助我们更好地编写高效的Python代码,减少无谓的计算和内存开销,提高代码的可读性和可维护性。本文基于Python生成器和迭代器的基础概念,介绍了生成器和迭代器的实现和应用。还介绍了一些Python生成器和迭代器的参考资料和优秀实践,以此帮助读者更好地学习和使用Python生成器和迭代器。

http://www.ppmy.cn/news/351482.html

相关文章

机房机柜相关

机柜、服务器的单位U 其实所谓的1U、2U的“U”就是服务器大小的一个单位。 U是一种表示服务器外部尺寸的单位,是unit的缩略语,详细尺寸由作为业界团体的美国电子工业协会(EIA)决定。 厚度以4.445cm为基本单位。1U就是4.445cm&a…

[902]工控机本机控制界面

目录 准备程序界面 准备 1.ubuntu16建qt界面左上角菜单被遮挡 (ubuntu18不用) 进入:设置->外观->行为 显示窗口菜单—设置为“在窗口的标题栏” 菜单可见度—设置为“总是显示” 2.在pro文件末尾加入:QMAKE_LFLAGS -no-…

工控GUI

eCGUI功能特性介绍 eCGUI微型16/32位嵌入式GUI,自主开发,历时四年左右,拥有全部版权. 体积小巧 大小在 100KB~180KB! 特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组件式 API…

Git第十六讲 Git属性和忽略文件

在使用Git进行版本控制时,我们常常需要忽略某些文件或目录,例如编译产生的临时文件、日志文件等,以避免将它们包含在版本库中。Git属性和忽略文件是两种常用的机制,用于控制文件的跟踪和忽略。本文将介绍如何使用Git属性和忽略文件…

工控机上安装物联网卡

一、进入设置,点更多 二、进入移动网络选项 三、打开移动数据网络漫游 四、打开apn 五、选项处于被选中状态 最后拉下桌面状态菜单进行确认,lte,cmcc,再点开浏览器看看是否可以上网 物联网卡,是中国移动面向物联网用…

工控机主机该怎么加固

工控安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工业控…

工控机主机加固安全浅析

工控安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工业控…

开源物联网框架EasyIot(适用于快递柜售货机)

【适用场景】 1. 智能柜(寄存柜、快递柜、取餐柜、自提柜)、售货机等带触摸工控一体机 2. 物联网网关 【架构实现】 硬件通过串口通信和工控机交互(下发开锁指令及反馈锁状态),工控机通过调用服务端webapi方式进行数据…