python生成器和迭代器

简介: python生成器和迭代器

一. 生成器和迭代器

一. 初识迭代器(iter)

迭代:一代一代的更新的

迭代的特点:每一次迭代得到的结果都是下一次迭代的初始值.比如手机系统,python版本

可迭代对象:字符串,列表,元组,集合,字典

迭代器是一个对象,它可以逐个访问集合中的元素而无需暴露集合的底层表示。迭代器提供了两个基本的方法:__iter__()__next__(),使得它可以在循环中逐个返回集合的元素。

下面是一个生活中的例子来说明迭代器的概念:

例子:书架上的书

假设你有一个书架,上面摆放了几本书。你想要创建一个可以逐本阅读书籍的迭代器。每次阅读一本书后,迭代器会提供下一本书的信息。

class Bookshelf:
    def __init__(self):
        self.books = ["Book 1", "Book 2", "Book 3", "Book 4"]
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index < len(self.books):
            current_book = self.books[self.index]
            self.index += 1
            return current_book
        else:
            raise StopIteration
# 使用迭代器
my_bookshelf = Bookshelf()
# 逐本阅读书籍
for book in my_bookshelf:
    print(f"Reading: {book}")

在这个例子中,Bookshelf 类是一个迭代器,它包含一个书籍列表和一个迭代器索引。__iter__ 方法返回迭代器本身,而 __next__ 方法逐个提供书籍的信息。当所有书籍都被遍历后,迭代器会抛出 StopIteration 异常,结束迭代。

在使用迭代器时,你可以通过 for 循环或 next() 函数逐个访问集合中的元素。这样的设计能够更加方便、高效地处理大量数据或对象集合。

二. 初识生成器(yield)

生成器是一种特殊的迭代器,它能够在需要时按需生成值,而不是一次性生成并保存所有值。生成器函数是使用 yield 语句的函数,每次调用生成器的 next() 方法或使用 for 循环迭代时,都会执行生成器函数直到遇到 yield,然后返回生成的值,并在下一次调用时从上次停止的地方继续执行。

生成器的优势在于它们可以有效地处理大量数据或需要逐个生成数据的情况,因为它们在内存使用方面更加高效。相比于一次性生成所有数据并将其保存在内存中,生成器只在需要时生成值,从而降低了内存消耗。

下面是一个生活中的例子,来说明生成器的概念:

例子:咖啡机

假设你是一位咖啡师,有一个咖啡机。你的顾客在早晨大量购买咖啡,但你不想一次性制作所有咖啡,因为这样会浪费咖啡和能源。相反,你决定使用生成器的概念。

你创建了一个咖啡机生成器函数,每次调用该函数时,它会制作一杯咖啡并将咖啡交给顾客。生成器函数使用 yield 语句暂停,直到下一次调用。这样,你可以在需要时逐杯生成咖啡,而不是一次性制作所有的咖啡。

def coffee_machine():
    coffee_types = ["Espresso", "Latte", "Cappuccino", "Americano"]
    for coffee_type in coffee_types:
        yield f"Here is your {coffee_type} coffee."
# 使用生成器
coffee_generator = coffee_machine()
# 逐个为顾客制作咖啡
for _ in range(5):
    print(next(coffee_generator))

在这个例子中,coffee_machine 函数是一个生成器函数,它通过 yield 返回一种咖啡的信息。每次调用 next(coffee_generator) 时,生成器函数将制作一种咖啡并返回给顾客。这种方式有效地模拟了按需生成咖啡的过程,而不是一次性生成所有咖啡。

相关文章
|
6天前
|
数据采集 存储 大数据
深入理解Python中的生成器及其应用
本文详细介绍了Python中的生成器概念,包括其定义、工作原理、常见用法以及在实际项目中的应用。通过具体示例和代码分析,帮助读者更好地理解和运用生成器,提高编程效率。
|
3天前
|
存储 大数据 索引
Python迭代器与生成器概览
【6月更文挑战第20天】迭代器提供不依赖索引的元素访问,支持`__next__()`和`iter()`,惰性计算节省内存,但不可回溯且无长度。生成器是特殊的迭代器,用`yield`动态生成值,更节省内存,代码简洁。创建迭代器可通过`iter()`函数,而生成器通过`yield`函数或生成器表达式实现。在处理大数据时尤为有用。
10 2
|
8天前
|
算法 大数据 数据处理
Python 迭代器和生成器有什么用?
**Python 迭代器与生成器巧妙用法** 本文探讨了 Python 中迭代器和生成器的实际应用场景。迭代器通过 `__iter__()` 和 `__next__()` 方法支持迭代操作,适用于处理大数据或动态数据流。例如,创建一个 `CountDown` 类实现倒计时迭代。生成器简化代码,如 `fibonacci` 函数用于生成斐波那契数列。此外,迭代器可用于分页、连接多个迭代器和过滤数据。生成器则擅长处理大文件、生成无限序列和实现斐波那契数列,还可构建数据处理管道和使用生成器表达式。掌握这些技巧能提升代码效率和处理问题的能力
|
9天前
|
Python
Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)
Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)
|
6天前
|
传感器 大数据 开发者
深入理解Python中的生成器和迭代器
在Python编程中,生成器和迭代器是实现懒计算和高效内存使用的重要工具。本文将详细探讨生成器和迭代器的概念、用法以及它们在实际开发中的应用场景。
|
12天前
|
存储 开发者 Python
探究Python中的迭代器与生成器
Python中的迭代器和生成器是常见的编程概念,它们为我们提供了一种高效的方式来处理数据集合。本文将深入探讨迭代器和生成器的概念、用法以及它们在Python编程中的实际应用。
|
15天前
|
大数据 数据处理 Python
深入理解 Python 迭代器与生成器:详细指南
深入理解 Python 迭代器与生成器:详细指南
|
1月前
|
Python
如何在Python中使用生成器表达式?
如何在Python中使用生成器表达式?
27 5
|
1月前
|
Python
Python 教程之控制流(17)生成器表达式
Python 教程之控制流(17)生成器表达式
16 0