知行编程网知行编程网  2022-11-25 10:30 知行编程网 隐藏边栏  1 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于零基础学python之迭代器的相关知识,包括python需要学哪些,以及没有编程基础学python这些编程知识,希望对大家有参考作用。

零基础学习python的迭代器

迭代器

迭代器可以简单理解为for循环,Python为我们提供了for循环之外的另一种访问集合元素的方式。

特点:

可以记住遍历的位置的对象。

迭代器从集合的第一个元素开始访问,直到访问完所有元素。

迭代器只能向前不能后退。

但是判断一个对象是否有迭代器,除了看能不能用for循环外,Python还为我们提供了一个更专业的方法——isinstance()。

我们可以使用 isinstance() 来判断当前对象是否可以迭代。

在使用迭代器之前,需要先引入迭代器,因为迭代器并不是Python的内置方法。

from collections.abc import Iterable
print(isinstance('geekdigging', Iterable))
print(isinstance([], Iterable))
print(isinstance([], Iterable))
print(isinstance({x for x in range(5)}, Iterable))
print(isinstance(123, Iterable))

打印结果如下:

True
True
True
True
False

这里有一点需要注意。我们在引入Iterable的时候,之前版本的import方法是from collections import Iterable,但是在Python3.7中会抛出异常,如下:

D:/Development/Projects/python-learning/base-iter/Demo.py:1: DeprecationWarning: Using or importing the ABCs 
from '
collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
from collections import Iterable

意思是这个导入方式在Python3.8中将被停用。现在Python3.8已经发布,我们根据提示导入,使用 from collections.abc import Iterable 。

在迭代器中,最重要的方法一定是 next() ,从名字就可以看出,它的作用就是下一个。

我们现在来尝试迭代一个列表:

list1 = [1, 2, 3, 4]
next(list1)

执行结果:

Traceback (most recent call last):
  File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 12, in <module>
    next(list1)
TypeError: 'list' object is not an iterator

不是说好的list可以迭代吗,怎么又报错了。

这位同学,先冷静一下,看看错误信息是怎么说的。这是为了提醒我们列表不是迭代器。

所以,可迭代对象不一定是迭代器!

我们导入Iterator模块,先把列表转成迭代器,试试看。

list1 = iter(list1)
print(type(list1))

执行结果:

<class 'list_iterator'>

从类型来看,现在是一个可迭代的列表,我们再试试next()方法。

print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))

执行结果:

1
2
3
4

你看,现在就能正常打印了吧。

刚才我们将整个列表中的元素迭代完了,如果这时候再迭代一次会怎么样呢?

print(next(list1))

执行结果:

Traceback (most recent call last):
  File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 23, 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))

结果我就不放出来了,大家应该都知道结果了。

另外,迭代器还有一个非常巨大的优势,就是不需要在迭代前准备好所有的元素。迭代器只有在迭代到一个元素时才开始计算该元素。在此之前或之后,该元素可能不存在或被销毁。

这个特性使得它在遍历一些巨大的集合时具有很大的优势。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享