ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中的可迭代对象和迭代器

2019-03-31 10:53:51  阅读:238  来源: 互联网

标签:迭代 Iterator Python 对象 print isinstance True Iterable


一、可迭代对象

可以直接作用于 for循环 的数据类型有以下几种:
1、集合数据类型 ,如list、tuple、dict、set、str等;
2、generator(生成器),包括生成器和带yield的generator function。
这些可以直接作用于 for循环 的对象统称为 可迭代对象:Iterable。
可以使用 isinstance() 判断一个对象是否是Iterable对象:

from collections import Iterable
# 判断列表
print(isinstance([], Iterable))
# 判断元组
print(isinstance((), Iterable))
# 判断字符串
print(isinstance('abc', Iterable))
# 判断生成器
print(isinstance((x for x in range(10)), Iterable))
# 判断整数
print(isinstance(100, Iterable))

True
True
True
True
False

二、迭代器

生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。可以使用 isinstance() 判断一个对象是否是 Iterator对象

from collections import Iterator
# 判断列表
print(isinstance([], Iterator))
# 判断元组
print(isinstance((), Iterator))
# 判断字符串
print(isinstance('abc', Iterator))
# 判断生成器
print(isinstance((x for x in range(10)), Iterator))

False
False
False
True

三、可迭代对象转化为迭代器

生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。把list、dict、str等Iterable变成Iterator可以使用 iter()函数

print(isinstance(iter([]), Iterator))
print(isinstance(iter('123'), Iterator))

True
True

下面我们调用一个列表转化为迭代器的例子,看看能否调用next()方法:
在这里插入图片描述
很明显,当我们调用next()方法时,可以运行成功,说明成功地转化为了迭代器。

四、小结

1、凡是可作用于for循环的对象都是Iterable类型。
2、凡是可作用于next()函数的对象都是Iterator类型。
3、集合数据类型如list、tuple、str等是Iterable但不是Iterator,不过可以通过iter()函数转化为一个Iterator对象。

标签:迭代,Iterator,Python,对象,print,isinstance,True,Iterable
来源: https://blog.csdn.net/a1786742005/article/details/88925297

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有