Python生成器与迭代器核心机制详解

听雨眠
听雨眠
发布时间:2026-10-13 | 3人浏览过
原创

本文深入解析Python中生成器与迭代器的底层原理。生成器通过边循环边计算实现内存优化,适用于处理大规模数据;迭代器则通过实现__iter__和__next__协议支持遍历。文章详细对比了生成器表达式与函数的创建方式,并演示了自定义迭代器的具体代码实现,帮助开发者理解延迟计算与资源节约机制。

生成器简介与核心特点

一、生成器简介

在Python中,生成器是一种基于特定算法“边循环边计算”的机制。在处理海量数据时,传统做法是将所有数据一次性加载到内存中,但计算机内存资源相对有限。当需要处理的数据量超过可用内存的四分之一时,建议采用生成器来优化资源使用。

二、生成器有什么特点?

1. 与传统容器类型相比,生成器显著节省内存空间。

2. 支持延迟计算,仅在需要获取结果时调用生成器的next()方法即可触发计算。

3. 具备可迭代性,可以像遍历列表(list)一样直接遍历生成器对象。

生成器的创建方式

三、如何创建生成器?

在Python中,主要有两种创建生成器的方式:生成器表达式和生成器函数。

生成器表达式


gen1 = (x for x in range(10))

生成器函数

生成器函数与普通函数的核心区别在于返回值机制:普通函数使用return返回结果并终止执行,而生成器函数使用yield返回结果。yield的关键特性在于它不会结束函数,而是将函数状态挂起,等待再次调用next()方法后,从上次挂起的yield处继续执行后续代码。


def gen():
a = 1
yield a
b = 2
yield b
c = 3
yield c

g = gen()

print(next(g))
print(next(g))
print(next(g))
print(next(g))

迭代器简介与可迭代类型

四、迭代器简介

迭代器是一个包含有限数量值的对象。

迭代器是一种可被迭代的对象,允许遍历其中的所有值。

从技术层面讲,在Python中,迭代器是实现了迭代器协议的对象,该协议包含__iter__()和__next__()两个方法。

可迭代的数据类型

列表、元组、字典和集合均属于可迭代对象,可以从这些对象中获取迭代器。

所有这些对象均可通过iter()方法获取对应的迭代器:

示例

从元组中获取一个迭代器,遍历并打印每个值:


mytuple = ("飞机", "汽车", "高铁")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

自定义迭代器的实现

五、创建迭代器

一个对象若要成为迭代器(即可迭代),必须实现__iter__()和__next__()方法。

__iter__()方法必须始终返回迭代器对象本身。

__next__()方法必须返回序列中的下一项。

示例

创建一个返回数字的迭代器,从1开始,每个序列项递增1(依次返回1、2、3、4、5等):


class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
x = self.a
self.a += 1
return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表