Python3 迭代器与生成器


Python3 迭代器与生成器

什么是迭代器?

迭代器是 Python 中最重要的工具之一,它可以用来遍历序列或者是其他类型的数据结构。在 Python 中,任何实现了迭代协议的对象都是可迭代的,这表示对象必须实现 iter() 和 next() 方法。

如何创建迭代器?

创建迭代器的方法十分简单,首先创建一个包含元素的对象并实现 iter() 方法,接着再实现 next() 方法,每次调用 next() 方法时都会返回序列中的下一个元素。如果没有更多元素了,那么 next() 方法就会引发 StopIteration 异常,这表示迭代结束。

下面是一个迭代器的示例代码:

class TestIterator:
    def __init__(self):
        self.items = [1, 2, 3, 4, 5]
        self.idx = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.idx >= len(self.items):
            raise StopIteration
        result = self.items[self.idx]
        self.idx += 1
        return result

什么是生成器?

生成器是一个特殊类型的迭代器,它不需要通过类来定义,而是使用函数来定义。调用该函数会返回一个生成器对象,该对象可以通过 next() 方法来进行迭代操作。

生成器与迭代器的区别在于,生成器是惰性求值的,它只有在被调用时才会生成数据。这种方法可以避免消耗大量的内存,因为只有在需要数据时才会进行计算。

如何创建生成器?

创建生成器的方法很简单,只需将函数中的 return 语句替换为 yield 语句。每次调用生成器时,它会在 yield 语句处停止并返回一个值。当再次调用时,生成器会在上一次停止的地方继续执行,并继续生成值。

下面是一个生成器的示例代码:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

什么是生成器表达式?

生成器表达式是一个类似于列表推导式的概念。它允许用户使用一种简单的方式来创建一个生成器对象,以便用于迭代操作。简单来说,生成器表达式是一种简化的语法形式,用于创建生成器。

下面是一个生成器表达式的示例代码:

squares = (i*i for i in range(10))

如何使用迭代器和生成器?

使用迭代器和生成器无需调用辅助函数或者其他操作,只需对序列或者数据结构进行遍历即可。当遍历到序列末尾时,自动引发 StopIteration 异常来结束迭代操作。

下面是一个使用迭代器和生成器的示例代码:

items = [1, 2, 3, 4, 5]

# 使用迭代器
iter_obj = iter(items)
while True:
    try:
        item = next(iter_obj)
    except StopIteration:
        break
    print(item)

# 使用生成器
def generator(items):
    for item in items:
        yield item

gen_obj = generator(items)
for item in gen_obj:
    print(item)

以上就是关于 Python3 迭代器与生成器的介绍与使用方法。通过使用迭代器和生成器,您可以轻松地遍历序列和其他数据结构,并且可以节省大量的内存空间。