Python 中 Iterator和Iterable的区别

原创 2015年11月19日 16:46:22

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

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


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

from collections import Iterable
isinstance({}, Iterable) --> True
isinstance((), Iterable) --> True
isinstance(100, Iterable) --> False


判断是不是迭代器,用Iterator

from collections import Iterator
isinstance({}, Iterator)  --> False
isinstance((), Iterator) --> False
isinstance( (x for x in range(10)), Iterator)  --> True

所以,

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

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

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

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


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

等价于

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



python如何判断对象是否iterable

1 通常判断 hasattr(myObj, '__iter__') 2, try: some_object_iterator = iter(some_object) exce...
  • permike
  • permike
  • 2016年08月10日 13:59
  • 1820

Python学习笔记 - 迭代器Iterator

我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的...

Python iterable, iter(), __iter__, iterator, itertools

Python迭代器与iter()迭代器是在版本2.2被加入到python的,它为类序列对象提供了一个类序列的接口。Python的迭代无缝地支持序列对象,而且它还允许迭代非序列类型,包括用户定义的对象。...
  • End0o0
  • End0o0
  • 2016年08月04日 13:46
  • 857

【Python】迭代器(iterator) vs 生成器(generator)

对python中的迭代器(iterator) vs 生成器(generator)之间的区别和应用进行介绍。

Python 中iterator

The two methods correspond to two distinct protocols: 1. An object can be iterated over with "for" ...

python Iterable和Iterator

python中的for...in循环就是为Iterable和Iterator而生的,没有其他存在的价值 python中没有for循环可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类...

Python学习之iterable&iterator

首先说明一下iterable和iterator最基本的区别。iterable是一个对象,包含一个__iter__或__getitem__方法,__iter__方法会返回一个iterator对象。通常可...
  • whgqgq
  • whgqgq
  • 2017年03月19日 15:31
  • 150

Java中Iterable和Iterator的辨析

本文主要对Iterable和Iterator两个接口进行深入学习。1、Iterable接口Iterable接口 (java.lang.Iterable) 是Java集合的顶级接口之一。我们首先看下这这...

java中Iterator和Iterable的区别

Iterator和Iterable都是接口。  好多类都实现了Iterable接口,这样对象就可以调用iterator()方法。  一般都是结合着用,比如  HashMap类就实现了Iterable接...

Java中Iterator与Iterable的区别

Iterable的定义: java.lang包 /** * Implementing this interface allows an object to be the target of ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python 中 Iterator和Iterable的区别
举报原因:
原因补充:

(最多只允许输入30个字)