Python 中 Iterator和Iterable的区别以及 Iterator使用示例

Iterable:可迭代的
Iterator:迭代器
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

Python中 list/truple/str/dict这些都可以被迭代(Iterable),但他们并不是迭代器(Iterator)。为什么?
因为和迭代器(Iterator)相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。
通俗一点的解释:
凡是可以for循环的,都是Iterable
凡是可以next()的,都是Iterator
集合数据类型如list/truple/dict/str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象
Python中的for循环本质上就是通过不断调用next()函数实现的。

判断是不是可以迭代,用Iterable和isinstance()
from collections import Iterable
isinstance({}, Iterable) --> True
isinstance((), Iterable) --> True
isinstance(100, Iterable) --> False

判断是不是迭代器,用Iterator和isinstance()
from collections import Iterator
isinstance({}, Iterator) --> False
isinstance((), Iterator) --> False
isinstance( (x for x in range(10)), Iterator) --> True

迭代器提供了一个统一的访问集合的接口。只要是实现了__iter__()或__getitem__()方法的对象,就可以使用迭代器进行访问。

创建迭代器对象
使用内建的工厂函数iter(iterable)可以获取迭代器对象:
  语法:
    iter(collection) -> iterator
    iter(callable,sentinel) -> iterator
  说明:
    Get an iterator from an object.
    In the first form, the argument must supply its own iterator, or be a sequence.
    In the second form, the callable is called until it returns the sentinel.

使用对象内置的__iter__()方法生成迭代器
1 >>> L1 = [1,2,3,4,5,6]
2 >>> l1 = L1.iter()
3 >>> print(l1)
4 <list_iterator object at 0x0000000002F3A828>
5 >>> l1.next()
6 1
7 >>> l1.next()
8 2
9 >>> l1.next()
10 3
11 >>> l1.next()
12 4
13 >>> l1.next()
14 5

使用内置工厂函数生成迭代器
1 >>> L1 = [1,2,3,4,5,6]
2 >>> I2 = iter(L1)
3 >>> print I2
4 <list_iterator object at 0x0000000002F3A7B8>
5 >>> I2.next()
6 1
7 >>> I2.next()
8 2
9 >>> I2.next()
10 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值