python中迭代器与生成器有什么作用
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"python中迭代器与生成器有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"python中迭代器与生成器有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2026年10月31日python中迭代器与生成器有什么作用
本文小编为大家详细介绍"python中迭代器与生成器有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"python中迭代器与生成器有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1、迭代器
迭代器是访问集合内元素的一种方式,一般用来遍历数据。迭代器只能一条一条的产生数据,下标不能返回。迭代器提供了一种惰性访问的方式。
迭代器Iterator 实现了__next__和__iter__函数。如果只实现了__iter__则是可迭代对象,例如list
from collections.abc import Iterable, Iteratorvar_list = [1, 2]print(isinstance(var_list, Iterable)) #Trueprint(isinstance(var_list, Iterator)) #False#var_list可迭代,但不是迭代器
2、迭代器和可迭代对象的实现
from collections.abc import Iterable, Iteratorclass MyIterator(Iterator): #Iterator 已经实现__iter__方法 def __init__(self, employee_list):self.employee_list = employee_listself.index = 0 def __next__(self):try: word = self.employee_list[self.index]except IndexError:#for 语句可以处理StopIteration raise StopIteration self.index += 1 return wordclass Company: #可迭代对象 def __init__(self,employee_list):self.employee_list = employee_listdef __iter__(self):return MyIterator(self.employee_list)if __name__ == '__main__': company = Company(['a', 'b', 'c'])for one_company in company:print(one_company)
在python的所有迭代场景中所作用的对象必须是可迭代对象(Iterable),因此迭代器(Iterator)要想在迭代场景中使用,就必须是Iterable对象;要成为Iterable对象就必须遵守Iterable协议,通过实现__iter__函数来满足Iterable协议,从而成为Iterable对象。如果迭代器不实现__iter_方法的话,上述函数和工具都无法用来对该迭代器进行迭代,只能通过人工调用next()方法来进行迭代。
3、生成器
函数中存在yield关键词,即为生成器函数。生成器使延期求值成为可能。
当python调用函数时,python解释器会创建一个栈帧,所有的栈帧都是分配在堆内存上的,这就决定了栈帧可以独立于调用者存在。
def testGen():yield 1 yield 2if __name__ == '__main__':#生成器对象,在python编译字节码的时候产生 var_gen = testGen()print(var_gen)##生成器实现类迭代协议 for var_value in var_gen:print(var_value) #1 2#使用生成器实现斐波那契def fib(var_index):if var_index <= 2:return 1 else:return fib(var_index - 1) + fib(var_index - 2)def fib2(var_index): var_list = [] var_n, var_a, var_b = 0, 0, 1 while var_n < var_index: var_list.append(var_b) var_b, var_a = var_a + var_b, var_b var_n += 1 return var_listdef fibGen(var_index): var_n, var_a, var_b = 0, 0, 1 while var_n < var_index:yield var_b var_b, var_a = var_a + var_b, var_b var_n += 1if __name__ == '__main__':print(fib(15))print(fib2(15)) var_gen = fibGen(15)print(list(var_gen))
4、生成器读取大文件
def myReadLine(var_f:object, var_separator:str) ->object : var_buf = "" while True:while var_separator in var_buf: var_position = var_buf.index(var_separator)yield var_buf[:var_position] var_buf = var_buf[var_position + len(var_separator) :] var_chunk = var_f.read(4096*10)if not var_chunk:yield var_bufbreak var_buf += var_chunkif __name__ == '__main__':with open('a.txt') as var_f:for var_line in myReadLine(var_f, '{|}'):print(var_line)读到这里,这篇"python中迭代器与生成器有什么作用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
迭代
生成器
生成
对象
函数
作用
文章
方法
内容
场景
数据
方式
处理
妥当
下标
人工
会创
元素
关键
关键词
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
A股互联网金融科技公司
互联网与科技金融数据
中国互联网科技发展
广州宏创互联网科技
互联网科技ppt模板
互联网科技网站
长亮科技 互联网金融
佰商互联网科技有限公司
哈尔滨新华互联网科技
西藏七维空间互联网科技有限公司
互联网经济与金融科技
中国航天科技大学国际工业互联网
翼展科技 首家互联网医院
威龙国际互联网科技公司
伊宁互联网科技做什么的
为客找房互联网科技公司怎么样
互联网方面的科技前沿
互联网科技包装股
世界互联网科技成果奖
株洲百竞科技的互联网营销顾问
广州百单互联网科技有限公司
互联网科技英文
互联网 卓越科技
互联网科技公司有哪些
晋城互联网科技
互联网金融科技元年
小米互联网科技园入驻
互联网科技包装股份有限公司上市
吉林省码上互联网科技电话
互联网科技创业计划的风险分析