python中迭代器与生成器有什么作用
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本文小编为大家详细介绍"python中迭代器与生成器有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"python中迭代器与生成器有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
网络安全综合防控体系有哪些
梦幻手游最强服务器
数据库可以申请知识产权吗
往服务器上面copy东西很慢
怎样从其他表格内提取数据库
天津常规软件开发哪家便宜
金山区微型网络技术专业服务
富德生命人寿保险数据库面试
网络安全等保二级标准
dnf70版本数据库
软件开发中心需要做柜员吗
项目软件开发价格
中国网络安全保卫战
国家网络安全宣传片
ssm数据库的连接池技术
手机软件开发外
软件开发net工程师
收邮件服务器类型pop
擎洲广达云计价软件开发版
艾尔登法环突然连接不上服务器
eve架设服务器
数据库 except用法
金山区微型网络技术专业服务
使用r语言爬数据库
修改游戏本地数值怎么上传服务器
证券量化研究软件开发
软件开发经济师最吃香的专业
nod32网络安全套装怎么样
工程造价数据库的应用
蓝牙不是无线网络技术吗