随笔 - 14, 文章 - 0, 评论 - 0, 阅读 - 170

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

4.迭代器(iterator)与生成器(generator)

Posted on   小熊_努力学习版  阅读(16)  评论(0编辑  收藏  举报

1. 可迭代对象
(1)列表、元组、字符串:有序,这些数据全在内存中,能够进行切片和随机读取,很占内存资源。
(2)字典、元组:无序,同上。
2.迭代器(iterator)
定义:迭代器是一个实现了 iter() 和 next() 方法的对象,采用类进行定义或者采用内置函数iter()对可迭代对象进行转换。
特点:逐个访问元素;占用内存资源少;只能循环使用一次。
适用范围:流式处理、在处理大型文件数据能减少内存的占用。
实质:迭代器的实质就是循环调用文件中的数据,
创建方法:(1)iter():用iter()对python的可迭代对象进行创建iter(list_1)
(2)采用类中的__iter__和__next__方法进行创建自己所需的迭代器。

3. 生成器generator
定义:生成器是一种特殊的迭代器,它使用了更简洁的语法——通过函数定义而不是类。生成器函数使用yield关键字返回数据,每次调用yield时,函数的状态会被冻结,直到下一次从生成器请求下一个值。
创建方法:采用函数的方式,返回采用yield

点击查看代码
"""
Created on 2025.1.3
content:
迭代器和生成器的学习与运用
"""
# 1. 可迭代对象:列表、元组
list1 = [1, 2, 3, 4, 5]
tuple1 = (1,2,3,4,5,6,7,8,9,10)
## 2. 迭代器iterator
"""
1.迭代器采用iter()函数从可迭代对象进行创建,但对于已经存在与内存中的可迭代对象采用这种方式转换为迭代器,
其内存的优化并不明显,但是在某些情况下可以实现输入数据形式的统一(比如都采用迭代器的数据形式)。
2.迭代器采用next()函数进行调用,每次调用只会获取迭代器中的一个值
3.迭代器只能被调用一次,调用完后就会被清空
4.实质迭代器就是循环调取文件值的一个循环过程。
"""
gen1 = iter(list1)
a = next((gen1)) # 采用next()函数获取迭代器中的一个值,且这个值被清空。
for i in gen1: # 在使用for循环时,前面迭代器中被调用了的一个值就被删除了,且循环一次就被清空。
print(i)
with open(r"study_file\test_1.txt", 'r') as file:
for line in file: # 处理每一行
print(line)
## 3. 生成器:一种特殊的迭代器,采用yield关键字,返回一个生成器对象
"""
生成器采用函数进行定义,函数返回值采用yield关键字返回
也可以采用推导公式generator = (i for i in range(10))进行创建。
"""
# 创建了一个生成器 gen()这个gen()的作用是每次输出一个值,且值需要通过next()或者外部循环进行获取。
def gen():
for i in range(10):
yield i
x = gen()
print(next(x))
for i in gen():
print(i)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示