转于:https://blog.csdn.net/whgqgq/article/details/63685066

博主:gongqi1992

iterable和iterator最基本的区别:

iterable是一个迭代器对象,包含一个__iter__或__getitem__方法,__iter__方法会返回一个iterator对象。通常可以使用isinstance(e,collection.Iterable)方法判断一个对象e是否是可迭代的。__iter__方法需要返回一个iterator,也就是说这个方法需要被重写。例如:

class AIterable:
def __iter__(self):
return iter([1, 2, 3])
it = AIterable()
for i in it:
print("current item is: " + str(i))

运行结果为: 
current item is: 1 
current item is: 2 
current item is: 3
 
定义了一个iterable类,这个类含有一个__iter__方法,并且这个方法返回一个iterator。 
*注:iter是Python的build-in函数,返回一个iterator。

iterator是一个可迭代对象。该对象的类必须实现next(Python2.x)或__next__(python3.x)方法。例如:

class AIterator:
def __init__(self, s, e):
self.current = s
self.end = e
def __iter__(self):
return self
def __next__(self):
if self.current < self.end:
self.index = self.current
self.current += 1
return self.index
else:
raise StopIteration
it = AIterator(1,10)
for i in it:
print(i,end=' ')
运行结果为: 

1 2 3 4 5 6 7 8 9

由此可见,当调用for…in循环时,当in后面的对象是一个iterator时,则运行next()方法直到遇到StopIteration异常。同样,对于iterable对象,则先调用__iter__方法返回一个iterator,执行之前的操作步骤即可。

for…in语句的等价实现:

for i in [1,2,3,4,5]:
print(i,end=' ')

运行结果:1 2 3 4 5

上述代码等价于:

it = iter([1,2,3,4,5])
while True:
try:
print(next(it),end=' ')
except StopIteration:
break;
运行结果:1 2 3 4 5

最新文章

  1. runtime第三部分方法和消息
  2. Don&#39;t let self-built concept imprison yourself
  3. 《Python算法教程》译者序
  4. radio被选中,但是重复点击后事件不触发
  5. unbutu下搭建FTP服务
  6. centos查看磁盘扇区大小等信息
  7. delphi 去掉TreeView水平滚动条
  8. 今天碰到的angular 中的一个小坑
  9. LintCode-乱序字符串
  10. selenium登录163邮箱
  11. PAT甲级1022 Digital Library
  12. [大数据面试题]hadoop核心知识点
  13. 2017-9-10&quot;切题如切菜杯&quot;模拟赛T4 ZZI
  14. PHP : MySQLi【面向过程】操作数据库【 连接、建库、建表、增、删、改、查、关闭】
  15. dva-counter
  16. Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表
  17. js获取谷歌浏览器版本
  18. 9-(基础入门篇)云端安装MQTT服务器
  19. 删除string类型字符串中指定字符串段
  20. Linux-(chgrp,chown,chmod)

热门文章

  1. Python菜鸟之路:Python基础——函数
  2. Bootstrap学习-网格系统
  3. TensorFlow 初级教程(三)
  4. 记一次bash脚本报错原因
  5. RockerMQ connect to&lt;:10009&gt;fail
  6. 【leetcode刷题笔记】Unique Paths II
  7. Linux电源管理(4)-Power Manager Interface【转】
  8. HDU OJ 2159 FATE
  9. Smarty 的安装
  10. html符号实体