Python 教程之控制流(16)生成器

简介: Python 教程之控制流(16)生成器

先决条件:Yield 关键字和迭代器讨论生成器时涉及两个术语。

发生器功能: 生成器函数的定义类似于普通函数,但每当它需要生成值时,它都会使用 yield 关键字而不是 return 来执行此操作。如果 def 的主体包含良率,则该函数将自动变为生成器函数。

# 第一次产生1次,第二次产生2次,第三次产生3次的发生器功能
def simpleGeneratorFun():
  yield 1   
  yield 2   
  yield 3   
# 用于检查上述生成器函数的驱动程序代码
for value in simpleGeneratorFun():
  print(value)

输出

1
2
3

生成器-对象 : 生成器函数返回生成器对象。生成器对象可以通过在生成器对象上调用 next 方法或在“for in”循环中使用生成器对象(如上面的程序所示)来使用。

# 一个 Python 程序,用于演示如何将生成器对象与 next() 结合使用
# 生成器功能
def simpleGeneratorFun():
  yield 1
  yield 2
  yield 3
# x 是生成器对象
x = simpleGeneratorFun()
# 使用 next 循环访问生成器对象
print(next(x)) # In Python 3, __next__()
print(next(x))
print(next(x))

输出

1
2
3

因此,生成器函数返回一个可迭代的生成器对象,即可用作迭代器。作为另一个例子,下面是斐波那契数列的生成器。

# 斐波那契数列的简单生成器
def fib(limit):
  # 初始化前两个斐波那契数列
  a, b = 0, 1
  # 一个接一个地产生下一个斐波那契数列
  while a < limit:
    yield a
    a, b = b, a + b
# 创建生成器对象
x = fib(5)
# 使用 next 循环访问生成器对象
print(next(x)) # In Python 3, __next__()
print(next(x))
print(next(x))
print(next(x))
print(next(x))
# 使用 for in 循环循环迭代生成器对象。
print("\nUsing for in loop")
for i in fib(5):
  print(i)

输出

0
1
1
2
3
Using for in loop
0
1
1
2
3

应用: 

假设我们创建了一个斐波那契数列流,采用生成器方法使其变得微不足道;我们只需要调用next(x)来获得下一个斐波那契数列,而不必费心于数字流的结束位置或时间。更实用的流处理类型是处理大型数据文件,如日志文件。生成器为此类数据处理提供了一种节省空间的方法,因为在一个给定的时间点仅处理文件的某些部分。我们也可以将迭代器用于这些目的,但是生成器提供了一种快速的方法(我们不需要编写__next__并在此处__iter__方法)。

目录
相关文章
|
2月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
133 1
|
3月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
745 19
|
3月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
257 2
|
4月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
232 0
|
3月前
|
数据采集 存储 JSON
使用Python获取1688商品详情的教程
本教程介绍如何使用Python爬取1688商品详情信息,涵盖环境配置、代码编写、数据处理及合法合规注意事项,助你快速掌握商品数据抓取与保存技巧。
|
3月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
179 0
|
4月前
|
并行计算 算法 Java
Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
Python解释器不止CPython,还包括PyPy、MicroPython、GraalVM等,各具特色,适用于不同场景。本文深入解析Python解释器的工作原理、内存管理机制、GIL限制及其优化策略,并介绍性能调优工具链及未来发展方向,助力开发者提升Python应用性能。
302 0
|
4月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
存储 安全 API
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
427 0
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
995 13

推荐镜像

更多