• 周四. 11月 21st, 2024

Python 迭代器的详细介绍

城主

12月 26, 2022 ,

迭代器是 Python 中的一种对象,它可以用来在一个序列中依次访问元素。迭代器和序列不同,序列在内存中储存了整个序列,而迭代器只保存当前迭代位置的值,并在需要时加载下一个值。这样做可以节省内存,特别是当处理大型序列时。

要使用迭代器,需要先创建一个迭代器对象,然后使用 next() 函数访问序列中的元素。下面是一个简单的例子:





# 创建一个迭代器对象
iterator = iter([1, 2, 3])

# 使用 next() 函数访问迭代器中的元素
print(next(iterator))  # 输出 1
print(next(iterator))  # 输出 2
print(next(iterator))  # 输出 3

# 当迭代器中的元素用完时,会抛出 StopIteration 异常
print(next(iterator))  # 抛出 StopIteration 异常

在 Python 中,很多内置的数据结构(如列表、元组、字符串)都是可迭代的。这意味着你可以使用 for 循环或者使用内置的 iter() 函数来创建迭代器。





# 使用 for 循环遍历列表
for element in [1, 2, 3]:
    print(element)

# 使用 iter() 函数创建迭代器并使用 next() 函数遍历
iterator = iter([1, 2, 3])
print(next(iterator))
print(next(iterator))
print(next(iterator))

迭代器还可以用于实现自定义的迭代器。要创建自定义的迭代器,需要在类中实现两个特殊方法:__iter____next__

__iter__ 方法返回一个迭代器对象,而 __next__ 方法返回下一个值。当迭代器中的元素用完时,应该抛出 StopIteration 异常。

下面是一个简单的例子,展示了如何创建一个迭代器,它会生成一系列奇数:





class OddNumbers:
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        self.num = 1
        return self

    def __next__(self):
        if self.num <= self.max:
            result = self.num
            self.num += 2
            return result
        else:
            raise StopIteration

# 使用 for 循环遍历迭代器
for number in OddNumbers(5):
    print(number)

还有一种创建迭代器的方法是使用生成器。生成器是一种特殊的迭代器,它可以使用简单的语法来创建。使用生成器可以大大简化迭代器的创建过程。

阅读  Python 补丁的作用

要创建生成器,需要使用 yield 语句。下面是上面的例子的生成器版本:





def odd_numbers(max):
    num = 1
    while num <= max:
        yield num
        num += 2

# 使用 for 循环遍历生成器
for number in odd_numbers(5):
    print(number)

在 Python 中,可以使用内置的 enumerate 函数来迭代序列并跟踪元素的索引。这样做可以在循环中同时访问元素和它们的索引。

例如:





# 使用 enumerate 函数迭代列表并跟踪元素的索引
for i, element in enumerate(['apple', 'banana', 'orange']):
    print(f'{i}: {element}')

输出:





0: apple
1: banana
2: orange

另一个有用的内置函数是 zipzip 函数可以将多个序列的元素组合在一起,并构建一个迭代器。例如:





# 使用 zip 函数将两个列表的元素组合在一起
for element1, element2 in zip([1, 2, 3], ['a', 'b', 'c']):
    print(f'{element1}: {element2}')

输出:





1: a
2: b
3: c

以上信息是常用的Python创建迭代器和使用创建迭代器的方法。