python数据采集仪_数据采集卡支持python么深入理解Python生成器(Generator)
我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,而且如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:>>> mylist = [ x for x in range(1, 10)]
>>> mylist
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> gen = (x for x in range(1,10))
>>> gen
at 0x7f1d7fd0f5a0>
创建mylist和gen的区别仅在于最外层的[]和(),mylist是一个list,而gen是一个generator(生成器)。
我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?
如果要一个一个打印出来,可以通过generator的next()方法:>>> gen.next()
1
>>> gen.next()
2
>>> gen.next()
3
...
>>> gen.next()
9
>>> gen.next()
Traceback (most recent call last):
File "", line 1, in
StopIteration
我们讲过,generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
其实我们可以使用for循环来代替next()方式, 这样才更符合高效的编程思路:>>> gen = ( x for x in range(1, 10))
>>> for num in gen:
... print num
...
1
2
3
4
5
6
7
8
9
generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。
比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34, ...
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:def fib(max):
n = 0
a, b = 0, 1
while n
print b
a, b = b, a + b
n = n + 1
上面的函数可以输出斐波那契数列的前N个数:>>> fib(6)
1
1
2
3
5
8
仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。
也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print b改为yield b就可以了:def fib(max):
n = 0
a, b = 0, 1
while n
yield b
a, b = b, a + b
n = n + 1
这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:>>> fib(6)
这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
举个简单的例子,定义一个generator,依次返回数字1,3,5:>>> def odd():
... print 'step 1'
... yield 1
... print 'step 2'
... yield 3
... print 'step 3'
... yield 5
...
>>> o = odd()
>>> o.next()
step 1
1
>>> o.next()
step 2
3
>>> o.next()
step 3
5
>>> o.next()
Traceback (most recent call last):
File "", line 1, in
StopIteration
更多:数据采集卡支持python么深入理解Python生成器(Generator)
https://www.002pc.comhttps://www.002pc.com/python/1759.html
你可能感兴趣的生成器,Python,Generator,深入,理解
js加密数据ext 代码生成器
www.002pc.com认为此文章对《ext 代码生成器》说的很在理。 代码如下: var productsgrid; var produc
mysql如何创建唯一约束条件Generator 插件开发
Generator 插件开发:简单开发实例地址:欢迎下载 http://download.csdn.net/detail/ht_00001/95149221 继承:org.mybatis.generator.api.PluginAdapter
js后台数据变慢深入理解Vue router的部分高级用法
1.路由元信息学习电脑网从深入理解Vue router的部分高级用法分析来看,对深入理解Vue router的部分高级
mysql增加只读用户MySQL SQL Tuning:深入理解Order By_MySQL
bitsCN.com
MySQL SQL Tuning:深入理解Order By 在MySQL中ORDER BY按先后顺序有2种实现方式,先走索引无排序,如果不行,则用FILESORT走索引无排序需要满足
js中的push深入理解JS中Number(),parseInt(),parseFloat()三者比较
参考阅读:学习电脑网对《深入理解JS中Number(),parseInt(),parseFloat()三者比较》总结来说,为我们帝国cms模板制作很实用。
php如何读取exe文件内容PHP生成随机密码类分享
php/** * PHP - Password Generator Class * Version 1.0.0 * */ if (@!is_object($passGen) || !
php 视频续播PHP生成随机字符串(3种方法)
如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,文章整理了几种生成随机字符串的方法。
方法一
1、在33 � 126中生成一个
php 打印字体使用PHP生成二维码
随着科技的进步,二维码应用领域越来越广泛,本站之前已有文章介绍通过使用jQuery插件来生成二维码,今天我给大家分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维
用vs做phpphp Smarty模板生成html文档的方法
下面直接发代码 复制代码www.002pc.com从用vs做phpphp Smarty模板生成html文档的方法分析来看,对用vs做phpphp Smarty模板生成html文档的方法的结果。
0踩
赏
0 赞
python数据采集仪_数据采集卡支持python么深入理解Python生成器(Generator)相关推荐
- python正则化_如何最简单、通俗地理解Python的正则化?
目录: 一.笔记 二.我的自学路线 三.笔记目录 一.笔记 ① 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. ② 正则表达式中包含两个部分,一个是正则语法对应的字 ...
- 彻底理解python递归_如何最简单、通俗地理解Python的递归?
这是从林海峰博客里面copy的.很好的解释了,python函数的递归. 那什么是递归? 在函数内部,可以调用其他函数.如果在调用一个函数的过程中直接或间接调用自身本身 递归的样子 def digui( ...
- 大学使用python 编辑器_[雪峰磁针石博客]2018 最佳python编辑器和IDE
IDE没有统一的标准,自己习惯就是最好的.本文列出一些较常用的IDE,供大家参考. 一般而言,WingIDE.PyCharm.Spyder.Vim是比较常用的IDE. Spyder Spyder是Py ...
- 逻辑性不好可以学python吗_如果本文若未能让你学会“Python”,可能真的不适合学习Python...
很多小伙伴们会问学习Python难学吗? python就是以他简单易学出名的.几乎是现在最简单,却可塑性最高的语言了.一般有其它编程语言基础的,自学,三小时左右就能学会.现在Python都有给小朋友的 ...
- Python 2.x 即将终止支持,是时候和 Python 2 讲再见了
别再约束自己了,Python 2将在2020年寿终正寝. Python 2的报废(EOL)日期迟迟未到,不过现在终于有了眉目.自2020年1月1日起,Python 2将不再得到支持.Python的核心 ...
- ubuntu安装python百度经验_如何在Ubuntu 20.04上安装Python 3.9(含python编译安装和使用Apt命令安装)...
在本文中,我们将向您展示在Ubuntu 20.04上安装Python 3.9的两种方法.第一种使用APT命令安装Python3.9,第二种是在Ubuntu20.04上编译安装Python 3.9.本教 ...
- python优点是代码库支持、灵活_C++和Python混合编程的利器
Python是一种简单易学.功能强大的编程语言,它有高效率的高层数据结构,能简单而有效地实现面向对象编程.Python简洁的语法.对动态输入的支持和解释性语言的本质,使得它在很多领域的大多数平台上都是 ...
- excel用python数据分析_(转载)像Excel一样使用python进行数据分析
Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...
- python类加载_如何重新加载一个类在python shell?
如果我导入一个定义了属于同一个包的同名类的模块,它将被导入为一个类,而不是一个模块,因为父包的__init__.py.详情请参见 different import results at differe ...
最新文章
- OSPF 疑重难要14点--转屎壳Q岛的一个文章
- 成功解决ModuleNotFoundError: No module named ‘sklearn.grid_search‘
- 远程服务器任务,远程大批量操作windows服务器的计划任务
- 准备程序员面试?你需要了解这 14 种编程面试模式
- php mysql sqlite缓存_使用sqlite作为数据缓存
- 特斯拉明年会有100万辆自动驾驶出租车 你敢坐吗?
- ORB_SLAM 编译过程详解
- NLP在医学领域的应用(更新中)
- at91sam9260 开发环境的建立
- 英伟达、英特尔、AMD显卡设置,减少游戏掉帧卡顿
- 通过CCproxy配置内网linux服务器
- 数据通信与网络:CH5 Analog Transmission
- QQ被盗后被敲诈500元怎么办
- 【C#】两种方式实现给PDF文件加水印,源码分享
- s32k144 isystem linux,S32k144 简易 Bootloader
- acme.sh申请Let‘s encrypt泛域名证书Docker化部署
- 小红书X千瓜联合发布|小红书2021年4月创作者红人榜
- Linux C 编程内存泄露检测工具(二):memwatch
- 景深决定照相机什么特性_行政执法考试题库2017 2017摄影专业考试题库
- espnow 例程解析