Python教程

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

本文主要是介绍【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篇 可遍历对象与迭代器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!