python中迭代器与生成器有什么作用
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本文小编为大家详细介绍"python中迭代器与生成器有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"python中迭代器与生成器有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年02月24日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安全错误
数据库的锁怎样保障安全
北京醉美国际网络技术
长沙华诚网络技术有限公司
linux服务器密码到期时间
电力数据库一般用什么
济南玖卡网络技术有限公司
软件开发+买什么笔记本
丹江口软件开发服务保障
广州电脑手机设备租赁软件开发
mysql查找数据库指令
台江区阿斌网络技术服务部
仙桃天气预报软件开发
数据库设计的三种需求
机关网络安全意识不够
数据库原理及应用重庆大学出版社
检察官网络安全宣传周
特朗普宣布网络安全与基础设施
窗体是数据库应用系统的
湖南郴州市电脑软件开发培训中心
江宁区智能化软件开发排名靠前
部队网络安全员
濮阳市公安局网络安全
北湖区政府网络安全
北京网络技术培训班
数据库应用特点
怎么用php连接数据库实现签到
易语言读取数据库表
服务器电源开关有问题
国家规定网络安全密码
租服务器我的文件安全吗
汽车软件开发测试工程师培训