生成器

阅读: 13136

评论:7

前面我们已经好几次提到了生成器的概念。这里对其简要介绍一下。

有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对计算机的压力是非常大的。比如,假设需要获取一个10**20次方如此巨大的数据序列,把每一个数都生成出来,并放在一个内存的列表内,这是粗暴的方式,有如此大的内存么?如果元素可以按照某种算法推算出来,需要就计算到哪个,就可以在循环的过程中不断推算出后续的元素,而不必创建完整的元素集合,从而节省大量的空间。在Python中,这种一边循环一边计算出元素的机制,称为生成器:generator。

前面我们说过,通过圆括号可以编写生成器推导式:

>>> g = (x * x for x in range(1, 4))

>>> g

at 0x1022ef630>

可以通过next()函数获得generator的下一个返回值,这点和迭代器非常相似:

>>> next(g)

1

>>> next(g)

4

>>> next(g)

9

>>> next(g)

Traceback (most recent call last):

File "", line 1, in

next(g)

StopIteration

但更多情况下,我们使用for循环。

for i in g:

print(i)

除了使用生成器推导式,我们还可以使用yield关键字。

在 Python中,使用yield返回的函数会变成一个生成器(generator)。

在调用生成器的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。

# 斐波那契函数

def fibonacci(n):

a, b, counter = 0, 1, 0

while True:

if counter > n:

return

yield a # yield让该函数变成一个生成器

a, b = b, a + b

counter += 1

fib = fibonacci(10) # fib是一个生成器

print(type(fib))

for i in fib:

print(i, end=" ")

评论总数: 7

“在调用生成器的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值”

这句话没看懂啊!

By

用户6631187905 On

2020年8月21日 19:32

回复

一脸懵逼,直接跳过了

By

MANCHESTERfcc On

2019年10月18日 13:13

回复

蒙了

By

学以致用站颠疯 On

2018年4月28日 22:33

回复

在调用生成器的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。

By

海上有个树荫_hhh On

2018年3月11日 16:35

回复

这句话让我蒙了

用户5888865032

回复

海上有个树荫_hhh

2019年4月1日 17:28

回复

我理解就是:按照算法计算出一个值,并返回给用户,等下一次调用next()的时候再算出下一个值,调用一次next()计算一次值

神界游民

回复

用户5888865032

2019年7月3日 13:57

回复

>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> type(range(10))

>>> xrange(10)

xrange(10)

>>> type(range(10))

>>> type(xrange(10))

>>> dir(xrange)

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

-----------------------分割线----------------------------

py2中range生成的是列表,应该用xrange

py3没有xrange

By

ywhyme On

2018年1月18日 17:35

回复

python 生成器_python 生成器 - 刘江的python教程相关推荐

  1. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  2. 用python编写图片生成器_python生成器

    生成器 一.生成器 定义: 生成器与迭代器看成是一种.生成器的本质就是迭代器. 唯一的区别: 生成器是自己用python写代码构建的数据结构.迭代器都是(系统)提供的,或者转化而来的 获取生成器的三种 ...

  3. python生成器_Python生成器

    python生成器 We will look into python generator today. In our previous lesson we have learnt about pyth ...

  4. python做投标生成器_Python 生成器(generator)详细总结+示例

    简介 生成器(generator)是一种返回一个值的迭代器,每次从该迭代器取下一个值. 生成器有两种表示: 生成器表达式 生成器函数 生成器函数还包括一下内容: 通用生成器 协程生成器 委托生成器 子 ...

  5. python 期货交易_Python期货量化交易基础教程(1)

    (本教程基于天勤量化平台) 前言 语言: 人与人在沟通的时候,需要靠语言传递彼此的"意思",没有语言,人们就无法相互理解对方,语言是承载人们的"意思".&quo ...

  6. java比python难_python java JAVA比python难多少?

    python和java哪个好? 学python好还是java好一次一次的失望后来渐渐放弃,哪怕后来有人提起你的名字小编脸上也不会泛起红晕. Python Python是一种面向对象的解释型计算机程序设 ...

  7. anaconda对应python版本_Python基础——如何查看python版本、如何查看多个python版本

    前言 初学者来说,安装python过程是存在一定难度的. 在安装过程中,可能安装了多个python版本,可能安装了anaconda导致有自带的python,同时本身电脑也安装了官方下载的python也 ...

  8. python图像分析_python分析问题步骤Python比较两个图片相似度的方法

    本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一 ...

  9. python吧_python初始与安装 - Python东

    一. 学习Linux基础 -对计算机以及我们开发的程序的服务器的简单操作 二.Python开发 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域 ...

  10. c调用python函数_python - Linux C调用Python 函数

    1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...

最新文章

  1. windows端自动化遇到的问题
  2. python环境未激活_关于conda使用环境未被激活问题
  3. Alpha 冲刺报告(3/10)
  4. xhost: unable to open display linux下安装oracle
  5. 在离线环境中发布.NET Core至Windows Server 2008
  6. 0-1总体分布下的参数假设检验示例一(SPSS实现)
  7. 配置rc.local开机自启动文件的疑问?
  8. mysql5.7修改默认编码_mysql5.7设置默认编码
  9. 应用密码学笔记第五章-第六章
  10. android appium 原理,天天使用Appium,但是你真的理解Appium的工作原理吗
  11. kali-网站克隆工具-httrack
  12. opencv 学习之 液晶数字识别
  13. php当前时间加几天_php实现当前时间增加天数的方法
  14. 高德离线地图开发API
  15. 怎么用虚拟机当做服务器吗,虚拟主机可以当服务器用吗
  16. 哈哈哈哈哈哈不错测试一下测试一下哈哈哈哈哈哈不错测试一下测试一下
  17. linux logo程序设计,教你在线设计一个简单美观的LOGO
  18. 为什么要做语音聊天室
  19. 记2020-11-03 19:00邦盛技术二面
  20. 查询各科成绩前3和第3的学生(SQL)

热门文章

  1. python如何放一张图片上去_python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码...
  2. 基于gstreamer的支持动态获取多路流的rtsp server(笔记)
  3. 安装TensorFlow中遇到的问题(汇总)
  4. 二叉搜索树+快速排序 查到文本中出现频率最多的100个词 【留学生作业】
  5. Windows下Redis的使用
  6. 有谁做过在C# winform里,显示3D max文件的呢?请赐教了。
  7. mongodb与mysql的区别与具体应用场景
  8. 临时和永久关闭Selinux
  9. 转(matlab绘制不同形状)
  10. Node.js(window)基础(1)——用cmd命令行访问某一文件夹下的js文件