首页 > 其他 > 详细

[转]迭代器(Iterator)和可迭代对象(Iterable)

时间:2020-05-30 21:56:14      阅读:57      评论:0      收藏:0      [点我收藏+]
0、BaseTestSuite,我发现只有__iter__,没有__next__,原因就是调用了__iter__,从这里返回的是一个迭代器对象,卧槽尼玛,而self._tests是一个list,也就是说,list就是一个可迭代对象,iter(list),会调用list的__iter__方法,而__iter__方法一定返回的是一个迭代器对象
1     def __iter__(self):
2 
3         return iter(self._tests)

1、__iter__的返回值只要是个迭代器对象就可以,而迭代器对象最最最最重要的特征就是有__next__方法

 
2、当你用for  in  去操作 list的时候,list也是马上先调用__iter__方法,返回一个迭代器对象,然后一直循环执行__next__方法,除非__next__方法抛出这个经典的StopIteration()异常,不然它就会一直遍历下去,一个一个元素的访问
 
3、这是一个例子,里面有__iter__、有__next__方法的参考哦
 
 1 class ProblemB(object):
 2     def __init__(self):
 3         # 初始化数列计数器
 4         self.count = 0
 5         self._length = 0
 6     @property
 7     def length(self):
 8         return self._length
 9     @length.setter
10     def length(self, value):
11         if not isinstance(value,int):
12             raise ValueError("length must be a integer!")
13         if value < 1 or value > 100:
14             raise ValueError("length must between 1 ~ 100!")
15         self._length = value
16      def __iter__(self):
17         return self
18      def __next__(self):
19         if self.count >= self.length:
20             raise StopIteration()
21         self.count = self.count + 1
22         self.value = self.count * 2 - 1
23         return self.value
24    def solution(sample):
25     solu_iter = ProblemB()
26     solu_iter.length = sample
27     sum = 0
28     for i in solu_iter:
29         sum += i
30     return sum
31 print (solution(10)

 

4、所有的可迭代对象一定是实现了__iter__()方法的对象,证明它会返回一个迭代器对象,所以它就是可迭代对象
 
5、而迭代器(Iterator)则是实现了__iter__()和__next__()方法的对象,可以显示地获取下一个元素,__iter__方法会返回自己(自己就是迭代器对象)
 
6、Python官方推荐的两个判断方式   
是否是可以迭代的
isinstance(obj,Iterable)
是否是迭代器
isinstance(obj,Iterator)
 
7、通过上面的情况,可以明白迭代器对象一定是可迭代对象,可迭代对象就不一定是迭代器对象了
 
参考文章:https://blog.csdn.net/liweibin1994/article/details/77374854 python之__iter__函数与__next__函数
————————————————
版权声明:本文为CSDN博主「叫我王员外就行」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cadi2011/java/article/details/90487199

[转]迭代器(Iterator)和可迭代对象(Iterable)

原文:https://www.cnblogs.com/zxqqlove/p/12994619.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!