Python中的生成器
1. 什么是生成器:
在《Python核心编程》中有个定义:
《Python核心编程》 写道
挂起返回出中间值并多次继续的协同程序被称为生产器,那就是Python的生成器真正做的事情
那么什么是协同程序呢?
《Python核心编程》 写道
协同程序是可以运行的独立函数调用,可以暂停或者挂起,并从程序离开的地方继续或者重新开始
首先可以理解为:
- 生成器是函数
- 生成器可以在执行过程中返回中间值,并继续执行。
2. python中的生成器
在python中生成器就是一个带yield的函数,yield能返回一个值给调用者,并暂停运行,当生成器的next()方法被调用的时候,它会继续从离开的地方继续
3. 示例
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
>>> f = fab(5)
>>> f.next()
>>> 1
>>> f.next()
>>> 1
>>> f.next()
>>> 2
>>> f.next()
>>> 3
>>> f.next()
>>> 5
>>> f = fab(5)
>>> for i in f:
.... print i
1
1
2
3
5
4.运用场景
乍一看,生成器和迭代器差不多,功能也很相似,那么什么情况下用生成器呢。
一个明显的运用场景是要处理
一个大的数据集的时候,比如一个10G的文件,
如果用迭代的话,会产生很大的内存占用,如果用生成器的话就不会有这个问题
引用
列表解析式:
[expr for iter_var in iterable if cond_expr]
引用
生成器表达式:
(expr for iter_var in iterable if cond_expr)
比如一个10G的文件test_large
迭代式:
In [29]: f = open('test_large')
In [35]: sum([len(word) for line in f for word in line.split()])
在运行过程中用pmap查看其内存占用
total 294096K
这个结果是我在运行中查看的,只运行了10s左右
生成器:
In [32]: f.seek(0)
In [33]: sum(len(word) for line in f for word in line.split())
在运行过程中用pmap查看其内存占用
total 32024K
这个内存占用量直到运行结束都是这么多
引用
这仅仅是因为一个语言这样的特征不意味着你需要用它。如果在你程序里没有明显适合的话,那就别增加多余的复杂性!当你遇到合适的情况时,你便会知道什么时候生成器正是要使用的东西。
5. 在tornado中的运用
这个并没有详细的研究,只是遇到的时候使用,在tornado中主要是在异步机制中会用到yield。
@tornado.gen.coroutine
def get(self):
res = yield self.db.welecome.find_one()
res = res['message']
self.render('index.html', message="hello world", tick=res)
内部机制如何没有仔细研究,这应该是生成器运动的一个场景,
需要长时间执行的程序
6. 总结
- 大数据集使用生成器
- 需要长时间运行的操作,防止阻塞,不过需要借助其它的机制转换成异步操作,如celery
分享到:
相关推荐
在Python编程语言中,生成器和迭代器是两种重要的数据处理工具,它们允许开发者高效地处理大量数据,尤其是那些无法一次性加载到内存中的大数据集。本文将深入探讨Python中的生成器和迭代器的区别。 首先,我们需要...
您是否在学习Python的路程中感觉路程漫漫?是否曾经半途而废? 是否感觉该学的内容众多? 因为先前编过《信手拈来按键帮你来》所以这里秉承了它的理念。 以Delphi语言开发的,内置百款实例代码,从速借鉴、高效开发...
在Python编程中,生成器是一种高效处理迭代数据的机制。与传统的迭代器不同,生成器使用yield关键字来产生值,而不是一次性生成所有值。这种“懒加载”的方式可以显著减少内存使用,特别是在处理大型数据集或无限...
Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python...
Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器...
在Python编程中,代码生成器是一种能够根据特定的输入规则或模板自动生成源代码的工具。这样的工具对于重复性工作、创建样板代码或者快速构建项目框架特别有用。通过减少手动编写常见结构的工作,开发者可以将更多...
Python 二维码生成器是一种能够使用Python编程语言生成二维码图像的软件。它可以通过控制台或者导入模块的方式使用,可以生成各种格式的二维码,包括PNG、JPEG、GIF等格式,还可以生成带有文字、图片、链接等信息的...
在这个特定的项目中,"NFT人物头像随机生成器Python源码" 是一个利用Python编程语言编写的程序,用于创建具有独特设计的人物头像,这些头像可以被用作NFT艺术品的基础。通过这个程序,用户可以生成一系列随机组合的...
【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的实现.【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的...
Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python...
Python二维码生成器是一种利用Python编程语言创建二维码的工具。在当今信息化社会,二维码广泛应用于名片、网址、付款码、电子票务等领域。Python中有多个库支持二维码的生成,如`qrcode`、`pyqrcode`等。在这里,...
车牌自动生成器软件设计与实现是一个重要的课题,特别是在当前人工智能和计算机视觉领域中,车牌识别技术的应用越来越广泛。车牌识别对于智能交通系统、车辆追踪、安全管理等方面有着不可忽视的作用。本设计旨在利用...
在Python编程语言中,参数生成器是一种非常实用的工具,特别是在处理大量数据或者需要动态生成参数的场景下。参数生成器通常通过生成器函数来实现,这种函数在执行时不会一次性生成所有结果,而是每次调用`yield`...
Python中的生成器是一种高效、节省内存的迭代器实现方式,它们允许你在运行时动态生成序列,而无需一次性将所有元素存储在内存中。生成器在处理大数据集或无限序列时尤其有用,因为它们只在需要时产生下一个值,而...
**Python试卷生成器** 在教育领域,特别是在学校和培训机构中,教师经常需要为学生准备考试试卷。手动创建试卷是一项耗时且重复的工作。为了解决这个问题,我们可以利用编程技术,特别是Python,来创建一个自动化的...
内容概要:本文详细介绍了 Python 中的迭代器和生成器的概念、创建方法及其应用场景。首先解释了迭代器的基本概念、创建方法以及应用场景,如处理大型数据集和实现自定义遍历逻辑。接着介绍了生成器的概念,展示了...
Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - ...
在本案例中,我们关注的是一个基于Python实现的免安装词云生成器,它特别适合那些不熟悉编程环境设置或对Python无了解的用户。 首先,Python作为一种强大的编程语言,拥有丰富的库资源,其中`wordcloud`库是用于...
在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...