名为“1”的图,是一个迭代器,因为__iter__只循环一次,而不是多次。所以结果是正确的。
名为“2”的图,是一个迭代器,不知道什么原因它有多个迭代器的对象,能解释一下吗,谢谢大神。class SkipObject:
def __init__(self, wrapped):
self.wrapped = wrapped
self.offset = 0
def __iter__(self):
return self
def __next__(self):
if self.offset >= len(self.wrapped):
raise StopIteration
else:
item = self.wrapped[self.offset]
self.offset +=2
return item
if __name__ == '__main__':
alpha = 'abcdef'
skipper = SkipObject(alpha)
I = iter(skipper)
print(next (I))
for x in skipper:
for y in skipper:
print(x+y, end=' ')
#输出答案:a
#ce
--------------------------------------------------------------------------------------
class Iters:
def __init__(self, value):
self.data = value
def __iter__(self):
print('iter=> ',end='')
self.ix = 0
return self
def __next__(self):
print('next:',end='')
if self.ix == len(self.data):raise StopIteration
item = self.data[self.ix]
self.ix +=1
return item
a = Iters([1, 2,3,4,5])
for i in a :
print(i, end=' | ')
print()
print([i ** 2 for i in a])
#输出结果:iter=> next:1 | next:2 | next:3 | next:4 | next:5 | next:
#iter=> next:next:next:next:next:next:[1, 4, 9, 16, 25]
使用 iter() 、for in 或 各种推导式,都会执行 __iter__() 方法。 def __iter__(self):
print('iter=> ',end='')
self.ix = 0 # 构造迭代器时,索引置0
return self
|