Python中如何创建和使用迭代器?

2026-05-22 14:371阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计872个文字,预计阅读时间需要4分钟。

Python中如何创建和使用迭代器?

迭代器:iterator + 可迭代对象:iterable + 在本文中,我们将学习迭代器是如何工作的,以及如何使用 __iter__() 和 __next__() 方法构建自己的迭代器。迭代器(Iterator)是可以迭代的对象。

迭代器:iterator
可迭代对象:iterable

迭代器

在本文中,我们将学习迭代器是如何工作的,以及如何使用 __iter__()__next__() 方法构建自己的迭代器。

迭代器(Iterator)是可以迭代的对象,在 Python 中无处不在。它们在 for 循环、推导式、生成器等中得到了优雅的实现,但却隐藏在显而易见的地方。

Python 中的迭代器只是一个可以迭代的对象。一个每次仅仅返回一个元素的对象(有点像挤牙膏)。从技术上讲,Python 迭代器对象必须实现两个魔法方法:__iter__()__next__()方法,统称为迭代器协议(iterator protocol)。

如果我们可以从一个对象中得到一个迭代器,那么这个对象就被称为可迭代对象(iterable)。Python 中的大多数内置数据结构(容器)都是可迭代对象,比如 list列表、 tuple元组、 str字符串等等。iter ()函数(反过来调用__iter__()方法)从它们中返回一个迭代器。

Python中如何创建和使用迭代器?

遍历迭代器

我们使用 next() 函数手动遍历迭代器的所有元素。当我们到达结尾时,如果没有更多的数据要返回,它将引发 StopIteration异常。

示例:

# 定义一个列表 my_list = [4, 7, 0, 3] # 使用iter()返回一个迭代器对象 my_iter = iter(my_list) # 使用next()方法依次遍历 print(next(my_iter)) # 将打印 4 print(next(my_iter)) # 将打印 7 # next(obj) 和 obj.__next__()效果一样 print(my_iter.__next__()) # 将打印 0 print(my_iter.__next__()) # 将打印 3 next(my_iter) # 将会引起 StopIteration 异常

输出结果:

4 7 0 3 Traceback (most recent call last): File "<string>", line 24, in <module> next(my_iter) StopIteration

一种更优雅的自动迭代方式是使用 for 循环。这样一来,我们可以遍历任何可以返回迭代器的对象,例如列表、字符串、文件等等。

示例:

# 定义一个列表 my_list = [4, 7, 0, 3] # 使用for循环遍历 for i in my_list: print(i) 迭代器中的for循环

正如我们在上面的例子中看到的,for循环能够自动遍历列表。实际上,for 循环可以遍历任何可迭代的对象。让我们仔细看看 for 循环是如何在 Python 中实现的。

# 从可迭代对象中创建一个迭代器对象 iter_obj = iter(iterable) # 开启无限循环 while True: try: # 遍历元素 element = next(iter_obj) # 对元素进行一些操作 pass except StopIteration: # 如果引起StopIteration则终止循环 break

由此可见,for 循环在内部通过对可迭代对象(iterable)调用 iter()方法,来创建出一个迭代器(iterator)对象 iter_obj

笑不活的是,这个 for循环实际上竟是一个无限 while循环......意不意外,惊不惊喜

本文共计872个文字,预计阅读时间需要4分钟。

Python中如何创建和使用迭代器?

迭代器:iterator + 可迭代对象:iterable + 在本文中,我们将学习迭代器是如何工作的,以及如何使用 __iter__() 和 __next__() 方法构建自己的迭代器。迭代器(Iterator)是可以迭代的对象。

迭代器:iterator
可迭代对象:iterable

迭代器

在本文中,我们将学习迭代器是如何工作的,以及如何使用 __iter__()__next__() 方法构建自己的迭代器。

迭代器(Iterator)是可以迭代的对象,在 Python 中无处不在。它们在 for 循环、推导式、生成器等中得到了优雅的实现,但却隐藏在显而易见的地方。

Python 中的迭代器只是一个可以迭代的对象。一个每次仅仅返回一个元素的对象(有点像挤牙膏)。从技术上讲,Python 迭代器对象必须实现两个魔法方法:__iter__()__next__()方法,统称为迭代器协议(iterator protocol)。

如果我们可以从一个对象中得到一个迭代器,那么这个对象就被称为可迭代对象(iterable)。Python 中的大多数内置数据结构(容器)都是可迭代对象,比如 list列表、 tuple元组、 str字符串等等。iter ()函数(反过来调用__iter__()方法)从它们中返回一个迭代器。

Python中如何创建和使用迭代器?

遍历迭代器

我们使用 next() 函数手动遍历迭代器的所有元素。当我们到达结尾时,如果没有更多的数据要返回,它将引发 StopIteration异常。

示例:

# 定义一个列表 my_list = [4, 7, 0, 3] # 使用iter()返回一个迭代器对象 my_iter = iter(my_list) # 使用next()方法依次遍历 print(next(my_iter)) # 将打印 4 print(next(my_iter)) # 将打印 7 # next(obj) 和 obj.__next__()效果一样 print(my_iter.__next__()) # 将打印 0 print(my_iter.__next__()) # 将打印 3 next(my_iter) # 将会引起 StopIteration 异常

输出结果:

4 7 0 3 Traceback (most recent call last): File "<string>", line 24, in <module> next(my_iter) StopIteration

一种更优雅的自动迭代方式是使用 for 循环。这样一来,我们可以遍历任何可以返回迭代器的对象,例如列表、字符串、文件等等。

示例:

# 定义一个列表 my_list = [4, 7, 0, 3] # 使用for循环遍历 for i in my_list: print(i) 迭代器中的for循环

正如我们在上面的例子中看到的,for循环能够自动遍历列表。实际上,for 循环可以遍历任何可迭代的对象。让我们仔细看看 for 循环是如何在 Python 中实现的。

# 从可迭代对象中创建一个迭代器对象 iter_obj = iter(iterable) # 开启无限循环 while True: try: # 遍历元素 element = next(iter_obj) # 对元素进行一些操作 pass except StopIteration: # 如果引起StopIteration则终止循环 break

由此可见,for 循环在内部通过对可迭代对象(iterable)调用 iter()方法,来创建出一个迭代器(iterator)对象 iter_obj

笑不活的是,这个 for循环实际上竟是一个无限 while循环......意不意外,惊不惊喜