打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python 中 Iterator和Iterable的区别

Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。为什么?

因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。

判断是不是可以迭代,用Iterable

  1. from collections import Iterable
  2. isinstance({}, Iterable) --> True
  3. isinstance((), Iterable) --> True
  4. isinstance(100, Iterable) --> False

判断是不是迭代器,用Iterator

  1. from collections import Iterator
  2. isinstance({}, Iterator) --> False
  3. isinstance((), Iterator) --> False
  4. isinstance( (x for x in range(10)), Iterator) --> True

所以,

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象

Python中的for循环就是通过next实现的

  1. for x in [1,2,3,4,5]:
  2. pass

等价于
  1. #先获取iterator对象
  2. it = iter([1,2,3,4,5])
  3. while True:
  4. try:
  5. #获取下一个值
  6. x = next(it);
  7. except StopIteration:
  8. # 遇到StopIteration就退出循环
  9. break


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python|认识可迭代对象与迭代器
Python3学习(8)--迭代,可迭代的和迭代器
Python学习——for循环,生成器,迭代器详解
Python第六章-函数05-迭代器&生成器
Python3高级特性(三)之列表生成式和迭代器(Iterator)
Python高级第二天(迭代器)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服