Python 迭代器
Python 迭代器
一、迭代器
- 可以直接用for循环的数据类型有以下几种:
1.集合数据类型如:list、tuple、dict、set、str等.
2.generator. 包括生成器和带yield的generator function.
以上这些可以直接作用于for循环的对象统称为可迭代对象(Iterable).
如何判断是不是可迭代对象(Iterable)?
- 可以使用isinstance()判断一个对象是否Iterable对象. 如下:
# 1.首先需要导入Iterable模块
from collections import Iterable
print(isinstance([],Iterable))
输出:True
AA = isinstance({},Iterable)
print(AA)
输出:True
print(isinstance("abc",Iterable))
输出:True
如果返回True说明是可迭代对象(Iterable). 返回False说明不是可迭代对象(Iterable) PS:字符串也是迭代对象.
- 定义:【什么是迭代器】
可以迭代并且可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)
如何判断是不是可迭代器(Iterable)?
可以使用isinstance()判断一个对象是否是Iterator对象. 如下:
# 1.首先需要导入Iterator模块
from collections import Iterator
print(isinstance((x for x in range(10)), Iterator))
输出:True
print(isinstance([], Iterator))
输出:False
print(isinstance({}, Iterator))
输出:False
print(isinstance('abc', Iterator))
输出:False
以上可以看出生成器都是Iterator对象.但list、dict、str虽然是Iterable,却不是Iterator.
如何将list、dict、str等Iterable变成Iterator可以使用iter()函数:
from collections import Iterator
print(isinstance(iter([]), Iterator))
输出:True
print(isinstance(iter('abc'), Iterator))
输出:True
Iterator甚至可以表示一个无限大的数据流,例如全体自然数.而使用list是永远不可能存储全体自然数的.
- 总结:
1.可作用于for循环的对象都是迭代对象(Iterable)类型
2.可作用于next()函数的对象都是迭代器(Iterator)类型.它们表示一个惰性计算的序列.
3.集合数据类型如list、dict、str等是迭代对象(Iterable)但不是迭代器(Iterator).不过可以通过iter()函数获得一个Iterator对象.
4.所有的生成器都是迭代器. 但迭代器不一定都是生成器.

浙公网安备 33010602011771号