通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
https://blog.csdn.net/fgf00/article/details/52061971
Python生成器与迭代器对于喜欢Python开发的小伙伴们来说应该是不陌生的,不了解的小伙伴也没有关系,本篇文章扣丁学堂Python培训小编就给小伙伴们详解一下Python生成器与迭代器,感兴趣的小伙伴就随小编来了解一下吧。
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
本文是廖雪峰的Python教程的笔记,主要是摘抄一些重点。所以我把他划分到转载里。侵删。
这个循环就是每次从表[3,4.4,'life'] 中取出一个元素(回忆:表是一种序列),然后将这个元素赋值给a,之后执行隶属于for的操作(print)。
在python(本文python环境为python2.7)中,使用yield关键字的函数被称为generator(生成器)。故为了了解yield,必然先要了解generator,而了解generator之前,我们先要了解一下迭代。
生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题
iterable对象(可迭代的对象):可以使用for循环,例如:字符串、列表 、字典 、集合等
今天要分享的内容是Python的生成器、迭代器与yield语句。主要包括什么是生成器,如何定义一个生成器,如何调用生成器包含的元素。迭代器也是一样的,最后介绍yield语句,以及它和生成器有什么关系,这是本文的重点。 [* ! *] 理解本文需要一定的基础,需要了解Python列表的定义,基本操作,字典,元组,字符串的概念。Python中for循环的语法结构,以及需要知道 if __name__ =="__main__": 的作用是什么? 1. 迭代 首先来看一下迭代的定义: 如果给定一个列表list或元组
现在让我们使用while循环来遍历出一个列表list1 = [1, 2, 3, 4, 5]里面的所有元素。
1、生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存的限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占有很大的存储空间,如果我们仅仅访问前面几个元素,那后面绝大元素占用的空间都白白浪费。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素?这样就不必须创建完整的list,从而节省大量的空间。在Python中,这样一边循环一边计算的机制,称为生成器:generator。 要创建一个generator有很多种方法。第一个方法很
前面的文章和大家分享了数字、字符串、列表和元组,我们重新声明这些变量回顾一下! 数字、浮点数直接用等号声明 字符串需要将内容用英文单引号或双引号括起来 列表是外面用中括号括起来! 元组是用小括号括起
前面的文章和大家分享了数字、字符串、列表和元组,我们重新声明这些变量回顾一下! 数字、浮点数直接用等号声明 字符串需要将内容用英文单引号或双引号括起来 列表是外面用中括号括起来! 元组是用小括号括起来
对于指定索引范围取值的操作,Python提供了slice方法,类似于Excel中数据透视表的切片器。
while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块。break,continue用在循环内,跳出整个循环或者跳出一次循环。 一、while循环 1、一般格式 格式:首行以及测试表达式,有一列或多列缩进语句的主体以及一个选用的else部分(控制权离开循环时而没有碰到break语句时会执行) python会一直计算开投的测试,然后执行循环主体内的语句,直到测试返回假值为止。 while <test>: <statements1> else: <statements2> 2、例子 >>> while True: ... print "Type Ctrl+C to stop!" >>> while x: ... print x, ... x=x[1:] ... diege iege ege ge e 注意 print末尾的逗号,会使所有输出都出现在同一行。 >>> a,b=0,10 >>> while a<b: ... print a, ... a+=1 ... 0 1 2 3 4 5 6 7 8 9 Python并没有其他语言中所谓的"do until”循环语句,不过我们可以在循环主体底部以一个测试和break来实现类似的功能。 while True: do something if exitTest():break 3、对比shell的while语句 while 命令 do 命令1 命令2 done 在系统管理时常用与逐行读取一个文件并处理。 while read line do echo $line done < /etc/rc.conf shell中还有一个类似while的循环until until 条件 do 命令1 命令2 done EG: IS_ROOT=`who |grep root` until [ "$IS_ROOT" ] do echo 'root online' sleep 2 done 二、 break continue pass和循环的else break 跳出最近所在的循环(跳出整个循环语句) continue 跳到最近所在循环的开头处(来到循环的首行,跳过本次循环) pass 什么事也不做,只是空占位语句 循环else块 只有当循环正常离开时才会执行(也就是没有碰到break语句) 1、一般循环格式 加入break和continue语句后,while循环的一般格式如下: while <test>: <statements1> if <test2>:break if <test3>:continue if <test4>:pass else: <statements2> break和continue可以出现在while(或for)循环主体的任何地方,但通常会进一步嵌套在if语句中,根据某些条件来采取对应的操作。 2、列子 pass >>> while 1:pass ... pass可用于空类,有时有指的是"以后会填上”,只是暂时用于填充函数主体而已: >>> def func1(): ... pass continue continue语句会立即跳到循环的顶端,开始下一次循环。 >>> while x: ... x=x-1 ... if x%2!=0:continue ... print x, ... 8 6 4 2 0 这个例子中,如果是奇数就返回循环顶部,不会打印.是偶数就打印。 这个下面这个结果一样 >>> while x: ... x=x-1 ... if x%2==0: ... print x, ... 8 6 4 2 0 注意这两个例子的print位置,第一个print是属于while块的,测试不通过下执行,测试通过就回到循环顶端,第二个是属于if块的,只有测试通过才打印 >>> while x: ... x=x-1 ... if x%2==0: ... print x, ...break break语句会
迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但是他不能像列表一样使用下标来获取数据,也就是说迭代器是不能返回的。
第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
领取专属 10元无门槛券
手把手带您无忧上云