2026/6/28 16:25:15
网站建设
项目流程
在哪些网站能接到活做,wordpress数据维护,做网站跟做APP哪个容易,无锡 网站开发文章目录前言一、迭代与可迭代对象1.1 什么是迭代#xff1f;1.2 可迭代对象1.3 自定义可迭代对象二、迭代器2.1 什么是迭代器#xff1f;前言
本文主要介绍了迭代与可迭代对象以及迭代器的基础知识。 一、迭代与可迭代对象
1.1 什么是迭代#xff1f;
迭代是指通过重复执…文章目录前言一、迭代与可迭代对象1.1 什么是迭代1.2 可迭代对象1.3 自定义可迭代对象二、迭代器2.1 什么是迭代器前言本文主要介绍了迭代与可迭代对象以及迭代器的基础知识。一、迭代与可迭代对象1.1 什么是迭代迭代是指通过重复执行某个过程来逐项访问集合中的元素。在Python中我们经常使用 for 循环进行迭代。pythonprint(迭代的基本概念:)print(*50)# 字符串迭代print(1. 字符串迭代:)forcharinHello:print(f{char})print(\n2. 列表迭代:)# 列表迭代fruits[apple,banana,cherry]forfruitinfruits:print(f{fruit})print(\n3. 字典迭代:)# 字典迭代person{name:Alice,age:25,city:New York}forkeyinperson:print(f{key}:{person[key]})# 更优雅的字典迭代方式print(\n 字典项迭代:)forkey,valueinperson.items():print(f{key}:{value})print(\n4. 使用enumerate同时获取索引和值:)# 使用enumerate获取索引和值colors[red,green,blue]forindex,colorinenumerate(colors):print(f 索引{index}:{color})print(\n5. 使用zip同时迭代多个序列:)# 使用zip同时迭代多个序列names[Alice,Bob,Charlie]scores[85,92,78]forname,scoreinzip(names,scores):print(f{name}:{score}分)1.2 可迭代对象可迭代对象是实现了iter() 方法的对象或者实现了getitem() 方法且参数从0开始索引的对象。Python中大多数容器类型都是可迭代的。pythonfromcollections.abcimportIterableprint(可迭代对象判断:)print(*50)# 判断各种类型是否为可迭代对象test_items[(字符串,Hello),(列表,[1,2,3]),(元组,(1,2,3)),(集合,{1,2,3}),(字典,{a:1,b:2}),(range对象,range(5)),(数字,123),(布尔值,True),(None,None),(文件对象,open(__file__,r)),(生成器,(xforxinrange(3))),]forname,itemintest_items:try:is_iterableisinstance(item,Iterable)print(f{name:15}是可迭代对象:{is_iterable})# 尝试使用for循环验证ifis_iterableandnamenotin[文件对象,生成器]:# 对于文件对象和生成器我们不在这里迭代print(f 示例迭代: ,end)count0forelementinitem:ifcount3:# 只显示前3个元素print(f{element},end )count1else:print(...,end)breakprint()exceptExceptionase:print(f{name:15}检查出错:{e})print()# 注意对于文件对象需要关闭ifisinstance(test_items[9][1],Iterable):test_items[9][1].close()print(可迭代对象的特点:)print(1. 可以使用 for 循环进行遍历)print(2. 可以使用 iter() 函数获取迭代器)print(3. 可以使用解包操作)print(4. 可以作为某些函数的参数如 sum(), max(), min())1.3 自定义可迭代对象pythonprint(自定义可迭代对象:)print(*50)# 方法1实现 __iter__() 方法classMyIterable1:通过实现 __iter__() 方法创建可迭代对象def__init__(self,data):self.datadatadef__iter__(self):# 返回一个迭代器returniter(self.data)# 方法2实现 __getitem__() 方法classMyIterable2:通过实现 __getitem__() 方法创建可迭代对象def__init__(self,data):self.datadatadef__getitem__(self,index):returnself.data[index]def__len__(self):returnlen(self.data)# 测试自定义可迭代对象print(1. 实现 __iter__() 方法的类:)my_iter1MyIterable1([10,20,30,40,50])print(f 类型:{type(my_iter1)})print(f 是否可迭代:{isinstance(my_iter1,Iterable)})print( 迭代结果:,end )foriteminmy_iter1:print(item,end )print()print(\n2. 实现 __getitem__() 方法的类:)my_iter2MyIterable2([A,B,C,D,E])print(f 类型:{type(my_iter2)})print(f 是否可迭代:{isinstance(my_iter2,Iterable)})print( 迭代结果:,end )foriteminmy_iter2:print(item,end )print()print(\n3. 使用iter()函数获取迭代器:)# iter()函数的工作方式data[1,2,3]iteratoriter(data)# 相当于 data.__iter__()print(f 原始数据:{data})print(f 迭代器:{iterator})print(f next(iterator):{next(iterator)})print(f next(iterator):{next(iterator)})print(f next(iterator):{next(iterator)})try:print(f next(iterator):{next(iterator)})exceptStopIterationase:print(f 捕获 StopIteration 异常:{e})print(\n4. 迭代器耗尽后重新获取:)# 迭代器只能使用一次需要重新获取iterator1iter(data)iterator2iter(data)print(f iterator1 - next():{next(iterator1)})print(f iterator2 - next():{next(iterator2)})print(f iterator1 - next():{next(iterator1)})print(f iterator2 - next():{next(iterator2)})二、迭代器2.1 什么是迭代器迭代器是实现了迭代器协议的对象必须包含两个方法iter()返回迭代器自身next()返回下一个元素如果没有元素则抛出 StopIteration 异常pythonfromcollections.abcimportIteratorprint(迭代器详解:)print(*50)# 判断各种对象是否为迭代器test_objects[(列表,[1,2,3]),(列表的迭代器,iter([1,2,3])),(字符串,abc),(字符串的迭代器,iter(abc)),(range对象,range(3)),(range对象的迭代器,iter(range(3))),(生成器表达式,(xforxinrange(3))),]print(检查是否为迭代器:)forname,objintest_objects:is_iteratorisinstance(obj,Iterator)print(f{name:20}是迭代器:{is_iterator})print(\n迭代器的特点:)print(1. 迭代器一定是可迭代的)print(2. 迭代器只能前进不能后退)print(3. 迭代器是惰性的只在需要时计算下一个值)print(4. 迭代器只能遍历一次遍历完后需要重新创建)