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


目录
相关文章
|
8天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
40 8
|
8天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
29 7
|
8天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
29 4
|
8天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
25 5
|
23天前
|
大数据 数据处理 开发者
Python中的迭代器和生成器:不仅仅是语法糖####
本文探讨了Python中迭代器和生成器的深层价值,它们不仅简化代码、提升性能,还促进了函数式编程风格。通过具体示例,揭示了这些工具在处理大数据、惰性求值及资源管理等方面的优势。 ####
|
1月前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
28 1
|
1月前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
24 0
|
程序员 C# C++
简明Python3教程 8.控制流
简介 迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们。 那么如何改变它们的执行顺序呢?例如你希望程序根据不同情况作出不同反应,按照当前时间分别 打印出’Good Morning’或’Good Evening’? 也许你已经猜到了,这需要使用控制流程语句,python拥有3种此类语句,分别为if,for和while。
1227 0
|
18天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
16天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。