Python入门教程第36篇 可遍历对象与迭代器

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第36篇 可遍历对象与迭代器相关的知识,希望对你有一定的参考价值。

本篇我们介绍 Python 中的可遍历对象(iterable)与迭代器(iterator),以及它们之间的区别。

可遍历对象

在 Python 中,可遍历对象是指包含零个、一个或者多个元素的对象。

可遍历对象支持一次返回一个元素,因此我们可以使用 for 循环遍历这类对象。

实际上,range() 函数就是一个可遍历的对象,因为我们可以遍历它的结果:

for index in range(3):
    print(index)

输出结果如下:

0
1
2

同理,字符串也是一种可遍历对象,因为我们可以使用 for 循环遍历字符串:

str = 'Iterables'
for ch in str:
    print(ch)

列表和元组也都是可遍历的对象,我们可以对它们进行遍历。例如:

ranks = ['high', 'medium', 'low']

for rank in ranks:
    print(rank)

原则就是,如果某种对象可以遍历,它就是可遍历对象。

迭代器

可遍历对象可以进行迭代,迭代器(iterator)就是执行迭代操作时的代理对象。

如果想要获取可遍历对象的迭代器,可以使用 iter() 函数。例如:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)

一旦我们获得了迭代器,就可以利用 next() 函数获取可遍历对象中的下一个元素:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)

color = next(colors_iter)
print(color)

输出结果如下:

red

每次调用 next() 函数都会返回可遍历对象的下一个元素。例如:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)

color = next(colors_iter)
print(color)

color = next(colors_iter)
print(color)

color = next(colors_iter)
print(color)

输出结果如下:

red
green
blue

如果遍历完所有元素之后,再次调用 next() 函数,将会返回一个异常。

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)

color = next(colors_iter)
print(color)

color = next(colors_iter)
print(color)

color = next(colors_iter)
print(color)


# 返回异常
color = next(colors_iter)
print(color)

以上示例首先会返回 colors 列表中的三个元素,然后抛出一个异常:

red
green
blue
Traceback (most recent call last):
  File "iterable.py", line 15, in <module>
    color = next(colors_iter)
StopIteration

迭代器是有状态的,意味着一旦我们使用了迭代器中的元素,它就不再存在。也就是说,一旦我们遍历完整个迭代器,它就会变成一个空的迭代器。如果我们再次遍历这个迭代器,它不会返回任何内容。

由于我们可以遍历迭代器,因此迭代器也是一种可遍历对象。这一点比较令人困惑。例如:

colors = ['red', 'green', 'blue']
iterator = iter(colors)

for color in iterator:
    print(color)

输出结果如下:

red
green
blue

如果我们使用一个迭代器作为参数调用 iter() 函数,它会返回一个相同的迭代器。

我们会在后续课程中介绍如何创建可迭代对象。

总结

  • 可遍历对象(iterable)是一种可以进行遍历的对象,它可以一次返回一个元素。
  • 迭代器(iterator)是执行迭代操作时的代理对象。迭代器拥有状态,它也是一种可遍历对象。
  • 使用 iter() 函数获取可遍历对象的迭代器,使用 next() 函数获取可迭代对象中的下一个元素。

以上是关于Python入门教程第36篇 可遍历对象与迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Python入门-4控制语句:06for循环结构-遍历各种可迭代对象-range对象

Python入门

Python入门教程第34篇 列表遍历

python基础08--迭代器,生成器

python 迭代器

python 基础篇 13 迭代器与生成器