国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 迭代器和可迭代对象 以获得更好的体验。

# Python 的迭代器和可迭代对象

# 迭代器

迭代器(Iterator) 是 Python 中用于遍历集合对象的工具,它提供了一种统一的访问集合元素的方式。

在 Python 中,对象只要包含 __next__ 方法就被视为迭代器,该函数每次被调用时返回下一项数据,没有下一项时产生 StopIteration 异常。

通过 next 函数来获取迭代器的下一个数据项。

示例:

运行示例

import io

# 迭代器类
class Iterator:
    def __init__(self, stop):
        self.__stop = stop
        self.__current = 0
    
    # 逐项返回数据
    def __next__(self):
        if self.__current < self.__stop:
            self.__current += 1
            return self.__current - 1
        else:
            raise StopIteration

# 迭代器对象
iterator = Iterator(10)

# 迭代
while (value := next(iterator, None)) is not None:
    print(value)

# 可迭代对象

可迭代对象(Iterable) 是拥有迭代器的对象,在 Python 中,对象只要包含 __iter__ 方法就被视为可迭代对象,该函数负责返回迭代器。

通过 iter 函数来获取可迭代对象的迭代器。

示例:

运行示例

# 迭代器类
class Iterator:
    def __init__(self, stop):
        self.__stop = stop
        self.__current = 0
    
    # 逐项返回数据
    def __next__(self):
        if self.__current < self.__stop:
            self.__current += 1
            return self.__current - 1
        else:
            raise StopIteration

# 可迭代对象类
class Iterable:
    def __init__(self, stop):
        self.__iterator = Iterator(stop)

    def __iter__(self):
        return self.__iterator

# 创建可迭代对象
iterable = Iterable(10)

# for 迭代
for value in iterable:
    print(value)

将迭代器和可迭代对象写作两个类并不是必须的,很多时候可迭代对象的迭代器就是自己本身,__iter__ 函数返回 self

例如:

运行示例

# 既是可迭代对象又是迭代器
class Iterator:
    def __init__(self, stop):
        self.__stop = stop
        self.__current = 0
    
    # 
    def __next__(self):
        if self.__current < self.__stop:
            self.__current += 1
            return self.__current - 1
        else:
            raise StopIteration

    # 返回自身
    def __iter__(self):
        self.__current = 0 # 初始化
        return self

# 创建迭代器
iterator = Iterator(10)

# for 迭代
for value in iterator:
    print(value)
本文 更新于: 2025-06-19 01:15:31 创建于: 2025-06-19 01:15:31