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__方法)。


目录
相关文章
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
12天前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
17天前
|
SQL 关系型数据库 MySQL
milvus-use教程 python
本项目参考vanna项目,获取数据库元数据和问题SQL对,存入Milvus向量数据库,并进行相似性检索。采用m3e-large嵌入模型,通过DatabaseManager类实现数据库连接持久化,MilvusVectorStore类封装了Milvus操作方法,如创建集合、添加数据和查询。项目提供init_collections、delete_collections等文件用于初始化、删除和管理集合。所用Milvus版本较新,API与vanna项目不兼容。 [项目地址](https://gitee.com/alpbeta/milvus-use)
98 9
|
24天前
|
大数据 开发者 C++
Python语法糖详解教程
《Python语法糖详解教程》介绍了编程语言中的“语法糖”,即通过特殊语法形式简化代码,使代码更简洁、易读和高效。文章详细解析了列表推导式、字典推导式、元组解包、条件表达式、with语句和装饰器等核心语法糖,并提供了具体示例和最佳实践指南。通过这些技巧,开发者可以在保持底层功能不变的前提下,显著提升开发效率和代码质量。
46 8
|
26天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
5月前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
501 13
|
5月前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
79 9
|
5月前
|
数据可视化 API 数据处理
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
264 5
|
5月前
|
编解码 数据可视化 IDE
【Python篇】matplotlib超详细教程-由入门到精通(下篇)1
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
65 3
|
5月前
|
数据可视化 IDE Linux
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
693 2