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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下