五分钟搞懂python生成器迭代器

1、是什么

生成器和迭代器都是Python语言中的重要概念。

1.1 生成器

是什么?

生成器是一种特殊的函数,它可以逐步产生结果并在每个步骤中保持状态

如何理解?

生成器用yield返回一个值,在每个yield语句的位置上都会暂停执行,并将当前状态保存下来。当再次调用生成器时,它会从上次暂停的位置继续执行,并且能够恢复到之前的状态。这种方式使得生成器能够记住之前的计算结果,而不需要重新计算。这样生成器就可以在每个步骤中保持状态,以便下次继续使用。

有什么作用?

由于生成器在内存中只保留了当前状态以及生成下一个值所需的信息,因此它可以处理非常大的数据流,并且比传统的数据容器占用更少的内存。 通过调用next()方法或者使用for循环逐个获取生成器中的值,可以逐步获取生成器中的数据。

1.2 迭代器

迭代器是一种实现了特定方法(iter()和__next__())的对象。通过迭代器,我们可以逐步获取集合中的元素

2、案例

这里我们通过一个面试题带大家去深入理解

4G 内存怎么读取一个 5G 的数据?

答:通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后

在读取后面的 500MB 的数据。

python 复制代码
# 定义一个生成器函数,在python中只要函数中使用yield字段就是一个生成器函数。生成器函数 用于创建 生成器迭代器 (generator iterator)。
def process_data(file_path, batch_size):
    with open(file_path, 'rb') as file:
        while True:
            data = file.read(batch_size)
            if not data:
                break
            # 在此处进行对数据的处理
            # 可以将处理后的结果返回,或者做其他操作
            yield data

# 使用示例
file_path = 'your_file_path'  # 文件路径
batch_size = 500 * 1024 * 1024  # 500MB,注意单位为字节

data_generator = process_data(file_path, batch_size)

#迭代方法一
while True:
    try:
        batch = next(data_generator)
        # 对每个批次的数据进行处理
    	# 可以调用相应的函数或方法进行处理
    	print(f"Processing {len(batch)} bytes of data")
    	# 这里只是简单示例,实际处理需要根据具体需求进行编写
    except StopIteration:
        break

#迭代方法二
#for batch in data_generator:
#	print(f"Processing {len(batch)} bytes of data")
相关推荐
fanruitian11 分钟前
python 机器学习 ML LinearRegression KNN KMeans
python·机器学习·kmeans
鱼宵17 分钟前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
卷无止境27 分钟前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python
沫璃染墨31 分钟前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
维克兜率天1 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
刚入门的大一新生1 小时前
Linux-线程互斥
java·开发语言
come112341 小时前
Codex 下不同场景 模式选择
python
香芋芋圆1 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
神也畏惧菠萝2 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐62 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame