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

目录
相关文章
|
12天前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
6天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
28 5
|
15天前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
14天前
|
Unix Python
python 的标准库模块glob使用教程,主要为glob.glob()使用与glob.iglob()使用
python 的标准库模块glob使用教程,主要为glob.glob()使用与glob.iglob()使用
8 0
|
15天前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
Python
Python 控制流和函数
控制流 条件语句 Python只有一种条件语句,那就是if语句。如果需要多重分支,使用if-elif-else结构。Python没有switch语句,条件语句只有if这么一种。
1072 0
|
1天前
|
存储 数据采集 人工智能
探索Python编程之美——从基础到进阶
【9月更文挑战第9天】本文是一篇深入浅出的技术分享文章,旨在引导读者从零基础开始掌握Python编程。我们将通过生动的实例和代码示例,探讨Python的基本语法、数据结构、函数、模块以及面向对象编程等核心概念。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python编程之旅吧!
16 11
|
2天前
|
Python
探索Python编程的奥秘:打造你的第一个程序
【9月更文挑战第8天】本文将带你进入Python编程的世界,通过一个有趣的项目——制作一个简单的猜数字游戏,让你快速入门。我们不仅会分享代码编写的步骤,还会讲解每一行代码的含义和作用,确保即使是编程新手也能跟上节奏。文章末尾附有完整代码,方便读者实践和学习。
18 12
|
3天前
|
API Python
探索Python中的多线程编程
探索Python中的多线程编程
20 5
|
6天前
|
存储 开发者 Python
探索Python编程之美
【9月更文挑战第5天】在这篇文章中,我们将一起踏上一场Python编程的奇妙之旅。从基础语法到高级特性,我们将一步步揭开Python语言的神秘面纱。你将学习如何编写清晰、高效的代码,掌握函数、类和模块的使用,以及理解面向对象编程的核心概念。此外,我们还将探讨异常处理、文件操作等实用技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技巧,让你在编程的道路上更加从容自信。