python迭代原理

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值