Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain

5. Python 高级特性

5.2 迭代器与生成器

在 Python 中,迭代器和生成器是处理序列数据的强大工具。它们不仅能够高效地处理大量数据,还能节省内存资源。本节将详细介绍迭代器和生成器的概念、使用方法以及它们在实际编程中的应用。

5.2.1 迭代器

迭代器是一个可以记住遍历位置的对象。它实现了两个特殊方法:__iter__() 和 __next__()。__iter__() 返回迭代器对象本身,而 __next__() 返回序列中的下一个值。当没有更多元素时,__next__() 会引发 StopIteration 异常。

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value

# 使用迭代器
my_iterator = MyIterator([1, 2, 3])
for item in my_iterator:
    print(item)
5.2.2 生成器

生成器是一种特殊的迭代器,它使用 yield 关键字来返回值。生成器函数在每次调用 yield 时会暂停执行,并在下一次调用时从暂停的地方继续执行。这使得生成器非常适合处理大数据集或无限序列。

def my_generator(data):
    for item in data:
        yield item

# 使用生成器
gen = my_generator([1, 2, 3])
for item in gen:
    print(item)
5.2.3 生成器表达式

生成器表达式是一种简洁的生成器创建方式,类似于列表推导式,但使用圆括号而不是方括号。生成器表达式在内存使用上更加高效,因为它不会一次性生成所有元素。

gen_exp = (x * x for x in range(10))
for item in gen_exp:
    print(item)
5.2.4 迭代器与生成器的比较
  • 内存使用:生成器在内存使用上更加高效,因为它们不会一次性生成所有元素。
  • 执行速度:迭代器通常比生成器更快,因为它们不需要暂停和恢复执行。
  • 适用场景:生成器适合处理大数据集或无限序列,而迭代器适合处理已知大小的序列。
5.2.5 实际应用
  • 文件读取:使用生成器逐行读取大文件,避免一次性加载整个文件到内存。
  • 无限序列:生成器可以用于生成无限序列,如斐波那契数列。
  • 数据处理:在数据处理管道中使用生成器,可以有效地处理流式数据。
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 使用生成器生成斐波那契数列
fib = fibonacci()
for _ in range(10):
    print(next(fib))

通过掌握迭代器和生成器,你可以编写出更加高效和灵活的 Python 代码,特别是在处理大数据集或复杂数据流时。

Last Updated:: 3/17/25, 7:20 PM