Python不归路_迭代器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python不归路_迭代器相关的知识,希望对你有一定的参考价值。
迭代器:
for循环可以对两类数据类型进行迭代:
1.比如list、tuple、dict、set等
2.带有yield关键字的函数或者能用__next__()进行调用的,也就是生成器
能被for调用的对象都是Iterable的,可以使用isinstance方法验证是不是Iterable
from collections import Iterable a=[1,‘b‘,‘c‘] b={‘name‘:‘gally‘,‘age‘:23} isinstance(a,Iterable) isinstance(b,Iterable)
输出结果:
True
True
那么既然list、tuple、dict、set等都是Iterable,那是不是Iterator呢?我们仍然可以使用isinstance来判断。
from collections import Iterator isinstance(a,Iterator) isinstance(b,Iterator)
输出结果:
False
False
很明显list、set、tuple、dict都不是迭代器,但是它们是可以迭代的。那能否把它们也变成迭代器呢?
from collections import Iterator a=[1,‘b‘,‘c‘] isinstance(iter(a),Iterator)
输出结果:
True
小结:List、Set、tuple、dict等是Iterable,但不是Iterator,使用Iter()方法可以使可迭代对象变成迭代器。
接下来我们来看生成器是否Iterable和Iterator,同样我们还是用isinstance来验证。
from collections import Iterator
def func1(x): while x < 1000: n = x**2 yield n x+=1 f=func1(200)
isinstance(f,Iterator)#判断是否是迭代器
输出结果:
True
from collections import Iterable isinstance(f,Iterable)
输出结果:
True
小结:生成器既是Iterable,又是Iterator。
总结:能用for循环的都是Iterable类型。
list、dict、set、tuple等都是Iterable但不是Iterator,可以通过Iter()函数使其变为Iterator。
生成器都是迭代器。
以上是关于Python不归路_迭代器的主要内容,如果未能解决你的问题,请参考以下文章