零基础学python之迭代器是什么
这篇文章主要介绍零基础学python之迭代器是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
迭代器
迭代器可以简单的理解为 for 循环, Python 除了 for 循环为我们准备了另一种访问集合元素的方式。
特点:
可以记住遍历的位置的对象。
迭代器从集合的第一个元素开始访问,直到所有的元素访问结束。
迭代器只能向前不能后退。
但是判断一个对象是否有迭代器,除了看它能不能使用 for 循环外, Python 也为我们提供了更加专业的方法—— isinstance() 。
我们可以使用 isinstance() 来判断当前的对象是否可以迭代。
在使用迭代器之前,需要先将迭代器引入,因为迭代器不是 Python 的内置方法。
fromcollections.abcimportIterableprint(isinstance('geekdigging',Iterable))print(isinstance([],Iterable))print(isinstance([],Iterable))print(isinstance({xforxinrange(5)},Iterable))print(isinstance(123,Iterable))
打印结果如下:
TrueTrueTrueTrueFalse
这里有一个小点注意一下,当我们在引入 Iterable 的时候,在之前的版本引入方式都是 from collections import Iterable ,但是在 Python3.7 的时候抛了一个异常出来,如下:
D:/Development/Projects/python-learning/base-iter/Demo.py:1:DeprecationWarning:UsingorimportingtheABCsfrom'collections'insteadoffrom'collections.abc'isdeprecated,andin3.8itwillstopworkingfromcollectionsimportIterable
含义是这种引入方式将在 Python3.8 中停止使用,现在 Python3.8 已经发布了,我们就按照提示中的方式来引入,使用 from collections.abc import Iterable 。
迭代器中,最重要的方法一定是 next() ,从名字上就能看出来,它的作用是下一个。
我们现在来尝试迭代一个列表:
list1=[1,2,3,4]next(list1)
执行结果:
Traceback(mostrecentcalllast):File"D:/Development/Projects/python-learning/base-iter/Demo.py",line12,in<module>next(list1)TypeError:'list'objectisnotaniterator
不是说好的列表是可以迭代的么,为什么又报错了。
这位同学,先消消气,看看报错信息说的是啥,这是在提示我们列表并不是一个迭代器。
所以,可迭代对象不一定是迭代器!
我们导入 Iterator 模块,先将列表转换成迭代器,再试试看。
list1=iter(list1)print(type(list1))
执行结果:
<class'list_iterator'>
从类型上来看,现在已经是一个可以迭代的列表了,我们再试试 next() 方法。
print(next(list1))print(next(list1))print(next(list1))print(next(list1))
执行结果:
1234
你看,现在就能正常打印了吧。
刚才我们将整个列表中的元素迭代完了,如果这时候再迭代一次会怎么样呢?
print(next(list1))
执行结果:
Traceback(mostrecentcalllast):File"D:/Development/Projects/python-learning/base-iter/Demo.py",line23,in<module>print(next(list1))StopIteration
看到了咯,会抛出 StopIteration 的异常。
可能看到这里,大家还是感觉迭代器没什么用,下面我再来举个例子,如果我们现在有一个 set 集合,我想要获取一个一个 set 集合中的元素,这时迭代器就派上用场了,因为在 set 集合中,是没有索引的,如果想要取到某个值,就只能使用 for 循环整个集合,但是有了迭代器以后,我们就无需循环整个集合了。
set1={1,2,3,4,5}set1=iter(set1)print(next(set1))print(next(set1))print(next(set1))print(next(set1))print(next(set1))
结果我就不放出来了,大家应该都知道结果了。
除此之外,迭代器有一个非常巨大的优势是在迭代之前,无需准备好所有的元素,迭代器仅在迭代到某个元素的时候才开始计算这个元素,在这之前或者之后,元素是可以不存在或者被销毁的。
这个特性使得它在遍历一些体积巨大的集合的时候,具有非常大的优势。
以上是零基础学python之迭代器是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。