03-1 迭代器基本构造与优化

基本构造1:

from collections import Iterable

class Classmate(object):
	def __init__(self):
		self.names = list()
	def add(self,name):
		self.names.append(name)
	def __iter__(self):
		# 1. 如果想要一个对象成为一个  可以迭代的对象,即可以使用for循环,那么必须使用__iter__()这个方法实现
		return Demo(self)	# 2.在第1步成立的前提下,调用iter方法得到一个xxxx.obj对象的__iter__方法的返回值

# 3.__iter__方法的返回值是一个迭代器
class Demo(object):
	def __init__(self,obj):
		self.obj = obj
		self.carren_num = 0		
	def __iter__(self):
		pass

	def __next__(self):
	# 迭代时通过__next__取值
		if self.carren_num < len(self.obj.names):
			ret = self.obj.names[self.carren_num]
			self.carren_num += 1
			return ret
		else:
			raise StopIteration
			

classmate = Classmate()
classmate.add("老王")
classmate.add("李三")
classmate.add("王五")

for temp in classmate:
	print(temp)
# print(isinstance(classmate,Iterable))

简化构造:

from collections import Iterable


class Classmate(object):
	def __init__(self):
		self.names = list()
		self.carren_num = 0
	

	def add(self,name):
		self.names.append(name)
	

	def __iter__(self):
		# 1. 如果想要一个对象成为一个  可以迭代的对象,即可以使用for循环,那么必须使用__iter__()这个方法实现
		# 2.在第1步成立的前提下,调用iter方法得到一个xxxx.obj对象的__iter__方法的返回值
		return self	
        # 3.__iter__方法的返回值是一个迭代器
		

	def __next__(self):
	# 迭代时通过__next__取值
		if self.carren_num < len(self.obj.names):
			ret = self.obj.names[self.carren_num]
			self.carren_num += 1
			return ret
		else:
			raise StopIteration
			
			
classmate = Classmate()
classmate.add("老王")
classmate.add("李三")
classmate.add("王五")

for temp in classmate:
	print(temp)
# print(isinstance(classmate,Iterable))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值