首页 技术 正文
技术 2022年11月16日
0 收藏 986 点赞 4,540 浏览 1319 个字

列表生成器:  即List Comprehensions。 在python中,可通过内置的强大有简单的生成式来创建列表。例如创建一个1到10的列表list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  可以用list=[x for x in range(1,11)]直接实现

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

 L = []
for x in range(1, 11):
L.append(x * x) L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是,运用列表生成式,可以写出非常简洁的代码  list=[x*x  for x in range(1,11)]

生成器:

通过列表生成式,我们可以创建一个列表,但是,由于受到内存的限制,列表的容量是有限的,而且;创建一个包含100万个元素的列表,不仅占用很大的内存空间,如果我们仅仅需要访问前面几个元素,那后边的绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断的推算出后面的元素那?这样就不必创建完整的列表,从而节省大量的空间。在python中,这种一遍循环,一遍计算的机制,成为生成器:generator

创建生成器的方法1:只需把一个列表的[]改成() list = (x*2 for x in range(10))   next(list) 执行一次生成一个,一次只生成一个

创建生成器的方法2:用函数实现(当for循环无法实现的时候),比如:斐波那契数列

斐波拉契数列:除第一个第二个数外,任何一个数都是由前两位数相加得到。 1,1,2,3,5……

加上yield的函数就变成了列表生成式,不再是函数,变成了生成器,生成一个对象,需要变量接受

Yield有两个功能:停止函数,返回yield后面的那个值

                     

Send和next都可以让生成器(yield)继续执行,但是send可以放一个参数,__next__不能,send传的参数就是yield表达式的结果  第一次使用send带的参数必须为None或者使用__next__方法

yield多任务处理 :      

迭代器:

迭代器: 在上一个数值的基础上进行下一个数值(在原有基础上开发新的) 循环就是迭代

可迭代对象:一类是集合数据类型:list tuple,dict ,set, str等

另一类是generator,包括生成器和带yield的genarator function

这些可用于for循环的对象统称为可迭代对象:iterable

用isinstance()判断对象是否为迭代对象(iterable)

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731