python创建可以迭代的类

python中可以使用 for … in …进行遍历(迭代)的数据类型,都是可迭代的对象。如 列表,字符串,字典,元组 都是可迭代的(Iterable),而浮点数,整型,布尔值都是不可迭代。

for i in [1,2,3,4]:
	print(i)
for i in "abcd":
	print(i)
for i in {"key1":1,"key2":2,"key3":3}:
	print(i)
for i in ("tupe1","tupe2","tupe3"):
	print(i)

运行结果
在这里插入图片描述
判断一个对象是否可迭代

from collections.abc import Iterable
list1=[1,2,3]
print(isinstance(list1, Iterable))
# 结果为 True

迭代的过程实质上就是对 数据进行逐条的读取返回,直到所有数据均被迭代完成。python内部通过迭代器(Iterator)来实现这个功能。

可迭代的对象首先通过 __iter__ 生成一个迭代器, 然后对该迭代器不断调用 __next__方法,逐条返回迭代数据,从而实现对数据的迭代。

当使用 for … in …时,运行本质如下: 先通过 iter()方法返回数据的迭代器,然后通过next()方法进行逐条读取。

seq=[1,2,3,4]
diedaiqi = iter(seq)   # iter()函数获取数据的迭代器
while True:
	try:
		i = next(diedaiqi)   #next()函数返回迭代器的下一个值
	except StopIteration: #当迭代到没有数据时,退出
		break
	print(i)

iter()方法 调用的为对象内部的 __iter__()方法, next() 调用的对象内部的 __next()__方法,所以当我们自定义迭代器时,需要使用这两种方法。


#定义一个可迭代的类
class test(object):
	def __init__(self,data1):
		self.data1=data1
		self.data2=0

	def __iter__(self):
		return self

	def __next__(self):
		
		if self.data2 < self.data1:
			self.data2 +=1
			return self.data2
		else :
			raise StopIteration
		
    
for i in test(5):
	print(i)


# 结果
1
2
3
4
5

__iter__方法是在__next__方法之前执行的,所以如果不用__next__ ,可以在__iter__ 便返回一个生成器,也可实现类的迭代

class test(object):
	def __init__(self,data1):
		self.data1=data1
		self.data2=0
		self.get_dict={}

	def dict1(self):
		x=1
		y=2
		self.get_dict={x:self.data1,y:self.data2}
		return self.get_dict

	def __iter__(self):
		test.dict1(self)		
		for q in self.get_dict:
			yield self.get_dict[q]


		
for i in test(5):
	print(i)

#结果
0
5
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风风是超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值