可以直接作用于for循环的对象统称为可迭代对象
(iterable)。可以用isinstance()去判断一个对象是否是iterable对象。
可以直接作用于for循环的数据类型一般分为两种
1.集合数据类型,如list、tuple、dict、set、string
2.generator,包括生成器和带yield的generator function
使用需要引入collections中的Iterable。
示例如下:
from collections import Iterable
注意:从collections中导入,从python3.3已经弃用,到python3.9时将停止使用。
可以用从collections.abc中导入
示例如下:
from collections.abc import Iterable
使用示例:
- print(isinstance([], Iterable))
- print(isinstance((), Iterable))
- print(isinstance({}, Iterable))
- print(isinstance("", Iterable))
- print(isinstance("zhangsan", Iterable))
- print(isinstance((x for x in range(10)), Iterable))
- print(isinstance(1, Iterable))
-
- # 运算结果
- # True
- # True
- # True
- # True
- # True
- # True
- # False
迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,
直到最后抛出StopIteration错误,表示无法继续返回下一个值。
示例如下:
- num = (x for x in range(5))
- print(next(num))
- print(next(num))
-
- # 运算结果
- # 0
- # 1
可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator对象)。
示例如下:
from collections.abc import Iterator
Isinstance()函数还可以用来判断一个对象是否是Iterator对象。
示例如下:
- print(isinstance([], Iterator))
- print(isinstance((), Iterator))
- print(isinstance({}, Iterator))
- print(isinstance("", Iterator))
- print(isinstance("zhangsan", Iterator))
- print(isinstance((x for x in range(10)), Iterator))
- print(isinstance(1, Iterator))
-
- # 运算结果
- # False
- # False
- # False
- # False
- # False
- # True
- # False
可以通过iter函数转化为Iterator对象。
示例如下:
- iter1 = iter([1, 2, 3, 4, 5, 6])
- print(next(iter1))
- print(next(iter1))
-
- # 运算结果
- # 1
- # 2
python 迭代器相关知识学习笔记