python学习笔记(六) -- Iterator和Iterable

通过 isinstance可以查看对象的类型

>>> from collections import Iterable
>>> from collections import Iterator
>>> isinstance("123",Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance((1,2,3),Iterable)
True
>>> isinstance(set([1,2,3]),Iterable)
True
>>> isinstance(set((1,2,3)),Iterable)
True
>>> isinstance({'1':'a','2':'b'},Iterable)
True
>>> isinstance("123",Iterator)
False
>>> isinstance([1,2,3],Iterator)
False
>>> isinstance((1,2,3),Iterator)
False
>>> isinstance(set([1,2,3]),Iterator)
False
>>> isinstance(set((1,2,3)),Iterator)
False
>>> isinstance({'1':'a','2':'b'},Iterator)
False

>>> g = (x * x for x in range(10))  #generator 既是Iterable又是Iterator
>>> isinstance(g,Iterable)
True
>>> isinstance(g,Iterator)
True
>>> type(g)
<class 'generator'>

凡是Iterator的就可以通过for循环遍历以及通过next()迭代

 

凡是Iterable的就可以通过for循环遍历,不可以通过next()迭代

>>> a = [1,2,3,4,5]
>>> for n in a:
	print (n)

	
1
2
3
4
5
>>> next(a)
Traceback (most recent call last):
  File "<pyshell#96>", line 1, in <module>
    next(a)
TypeError: 'list' object is not an iterator


>>> g = (x * x for x in range(10))
>>> while True:
	try:	
		print (next(g))
	except StopIteration:
		break

	
0
1
4
9
16
25
36
49
64
81

Iterable对象 可以通过 iter(Iterable) 转换成 iterator对象

>>> a = [1,2,3,4,5]
>>> b = iter(a)
>>> isinstance(b,Iterator)
True
>>> isinstance(a,Iterator)
False
>>> while True:
	try:	
		print (next(b))
	except StopIteration:
		break

	
1
2
3
4
5

iterator对象的特点就是每次调用next()内存中才会存在下一个数据,相比于Iterable对象是非常节省内存空间的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值