#自定义类实现可迭代对象
class myiterator:
def __init__(self,start,stop,step):
#self.start变量用于把创建的类型当做迭器
self.start = start
self.stop = stop
self.step = step
def __next__(self):
'''此方法用书实现迭代器协议'''
print("myiterator.__next_被调用")
if self.start >= self.stop:
raise StopIteration
r = self.start
self.start += self.step #迭代器后移
return r
class myrange:
def __init__(self,start,stop=None,step=1):
if stop is None:
stop = start
start = 0
self.start = start
self.stop = stop
self.step = step
def __repr__(self):
return "myrane(%d,%d,%d)" % (self.star,self.stop,self.step)
def __iter__(self):
#此方法用于range类型创建对象当做可迭代对象
print("__iter__被调用")
return myiterator(self.start,self.stop,self.step)
l = [x for x in myrange(5,10)]
print(l)
r = myrange(5,10,2)
it = iter(r)
print(next(it))
print(next(it))
print(next(it))