python迭代原理
python中迭代的条件: 对象有__iter__()方法,就可以迭代
list01 = [10,20,15,76,28]
##python中for循环可以循环获取可迭代中的每个元素
#for item in list01:
# print(item)
#原理:有__iter__()方法的对象可以变成迭代器,迭代器有__next__()方法可以一步步拿出元素
iterator = list01.__iter__()
while True:
item = iterator.__next__() #迭代器有个方法:__next__()
print(item) #打印出所有的元素后报StopIteration异常
使用try捕获异常,完善一下原理
list01 = [10,20,15,76,28]
iterator = list01.__iter__()
while True:
try:
item = iterator.__next__()
print(item)
except StopIteration:
break
在自定义类中实现迭代功能
class SkillIterator:
'''迭代器'''
def __init__(self,data):
self.__target = data
self.__index = -1
def __next__(self):
如果没元素了,抛出异常
if self.__index >= len(self.__target)-1:
raise StopIteration
self.__index += 1
return self.__target[self.__index]
class SkillManager:
'''技能管理器 可迭代对象'''
def __init__(self):
self.__skills = [] #私有
#添加技能的方法
def add_skill(self,str_skill):
self.__skills.append(str_skill)
#可迭代对象的__iter__()方法,需要返回一个迭代器:有__next__()方法
def __iter__(self):
return SkillIterator(self.__skills)
manager = SkillManager()
manager.add_skill('降龙十八掌')
manager.add_skill('黑虎掏心')
manager.add_skill('六脉神剑')
#for循环迭代,manager必须是可迭代对象:有__iter__()
for item in manager:
print(item)