鱼C论坛

 找回密码
 立即注册
查看: 1649|回复: 1

[已解决]关于多个迭代器对象的问题

[复制链接]
发表于 2017-9-14 22:00:02 | 显示全部楼层 |阅读模式
5鱼币
名为“1”的图,是一个迭代器,因为__iter__只循环一次,而不是多次。所以结果是正确的。
名为“2”的图,是一个迭代器,不知道什么原因它有多个迭代器的对象,能解释一下吗,谢谢大神。
  1. class SkipObject:
  2.     def __init__(self, wrapped):
  3.         self.wrapped = wrapped
  4.         self.offset = 0
  5.     def __iter__(self):
  6.         return self
  7.     def __next__(self):
  8.         if self.offset >= len(self.wrapped):
  9.             raise StopIteration
  10.         else:
  11.             item = self.wrapped[self.offset]
  12.             self.offset +=2
  13.             return item
  14. if __name__ == '__main__':
  15.     alpha = 'abcdef'
  16.     skipper = SkipObject(alpha)
  17.     I = iter(skipper)
  18.     print(next (I))

  19.     for x in skipper:
  20.         for y in skipper:
  21.             print(x+y, end=' ')

  22. #输出答案:a
  23.           #ce
  24. --------------------------------------------------------------------------------------
  25. class Iters:
  26.     def __init__(self, value):
  27.         self.data = value
  28.     def __iter__(self):
  29.         print('iter=> ',end='')
  30.         self.ix = 0
  31.         return self
  32.     def __next__(self):
  33.         print('next:',end='')
  34.         if self.ix == len(self.data):raise StopIteration
  35.         item = self.data[self.ix]
  36.         self.ix +=1
  37.         return item
  38. a = Iters([1, 2,3,4,5])
  39. for i in a :
  40.     print(i, end=' | ')

  41. print()
  42. print([i ** 2 for i in a])
  43.    
  44. #输出结果:iter=> next:1 | next:2 | next:3 | next:4 | next:5 | next:
  45.           #iter=> next:next:next:next:next:next:[1, 4, 9, 16, 25]
复制代码
最佳答案
2017-9-14 22:00:03
使用 iter() 、for in 或 各种推导式,都会执行 __iter__() 方法。
  1.     def __iter__(self):
  2.         print('iter=> ',end='')
  3.         self.ix = 0 # 构造迭代器时,索引置0
  4.         return self
复制代码
1.png
2.jpg

最佳答案

查看完整内容

使用 iter() 、for in 或 各种推导式,都会执行 __iter__() 方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-14 22:00:03 | 显示全部楼层    本楼为最佳答案   
使用 iter() 、for in 或 各种推导式,都会执行 __iter__() 方法。
  1.     def __iter__(self):
  2.         print('iter=> ',end='')
  3.         self.ix = 0 # 构造迭代器时,索引置0
  4.         return self
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 08:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表