Python 教程之控制流(17)生成器表达式

简介: Python 教程之控制流(17)生成器表达式

Python中,要创建迭代器,我们可以同时使用常规函数和生成器。生成器的编写方式与普通函数类似,但我们使用 yield() 而不是 return() 来返回结果。它作为实现迭代器的工具更强大。它易于实现且更方便,因为它提供了按需元素的评估。与常规函数不同,常规函数在遇到返回语句时完全终止,生成器使用 yield 语句,其中函数的状态从上次调用中保存,并且可以在下次调用生成器函数时拾取或恢复。与列表相比,生成器的另一个巨大优势是它需要更少的内存。

除此之外,另外两个函数 next() 和 iter() 使生成器函数更加紧凑可靠。例:

# 用于说明 generator, yield() and next()的Python 程序
def generator():
  t = 1
  print ('First result is ',t)
  yield t
  t += 1
  print ('Second result is ',t)
  yield t
  t += 1
  print('Third result is ',t)
  yield t
call = generator()
next(call)
next(call)
next(call)

输出:

First result is  1
Second result is  2
Third result is  3

发生器函数和正常函数之间的区别 –

  • 函数生成后,该函数将暂停,控制权将转移给调用方。
  • 当函数终止时,将在进一步的调用中自动引发停止站点。
  • 局部变量及其状态在连续调用之间被记住。
  • 生成器函数包含一个或多个 yield 语句,而不是返回语句。
  • 由于像 next() 和 iter() 这样的方法是自动实现的,我们可以使用 next() 循环访问这些项。

还有各种其他表达式可以简单地编码,类似于列表理解,但我们使用括号而不是括号。这些表达式设计用于封闭函数立即使用生成器的情况。生成器表达式允许创建没有 yield 关键字的生成器。但是,它不会共享使用良率函数创建的发电机的全部功率。例:

# 用于说明生成器表达式的 Python 代码
generator = (num ** 2 for num in range(10))
for num in generator:
  print(num)

输出:

0
1
4
9
16
25
36
49
64
81

我们还可以使用生成器表达式生成一个列表:

string = 'geek'
li = list(string[i] for i in range(len(string)-1, -1, -1))
print(li)

输出:

['k', 'e', 'e', 'g']



目录
相关文章
|
3天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
10 1
|
5天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
10 3
|
4天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
8 0
|
4天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
8 0
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
3天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
5天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
4天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。