博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-迭代器与生成器的区别
阅读量:5902 次
发布时间:2019-06-19

本文共 1783 字,大约阅读时间需要 5 分钟。

这里涉及几个知识点:迭代器、生成器、yieId

先用个例子看一下迭代器与生成器的区别吧

#L是个list,迭代用for循环即可,L取出来是存放在内存中的,再多次去循环取出都可以 >>> L=[x*x for x in range(3)]>>> for i in L:	print(i)	014>>> for n in L:	print(n)	014 #把[]换成了()就成了生成器,只不过它只能循环出一次,因为它不是放在内存中的。它是实时生成数据的。>>> mygenerator = (x*x for x in range(3))>>> for i in mygenerator:	print (i)	014 #看我再循环一次,它已是空值>>> for n in mygenerator:	print(n)	>>>

 其实我感觉上最大差的几点有以下:

1、list函数调用直接出结果。而生成器是一个对象

>>> L = [1,2,3,4,5,6]>>> def xh():	for i in L:		print(i)		>>> g=xh()123456

 

>>> L1=[6,7,8,9,10]>>> def generator():	yield(L1)	for i in L1:		print(i)		>>> g=generator()>>> next(g)[6, 7, 8, 9, 10]

 这里有个yield的对比,大家感受一下

>>> L1=[6,7,8,9,10]>>> def generator():	yield(L1) #打印L1的意思 	for i in L1:		print(i)		>>> g=generator() #这里是一个生成器对象>>> next(g) #用next打印出来[6, 7, 8, 9, 10]#生成器第2个例子>>> def gen2():	for i in L1:		yield(i) #打印i的值		print(i)		>>> g=gen2()>>> print(g)
>>> for x in g: print(x) 667788991010

 2、其实想想也挺简单,yield只不过就是个标识,同时打印一次该结果

经典案例:杨辉三角

#将杨辉三角的每一行看成一个list,写一个生成器(generator),不断输出下一行listdef triangel(n):    L=[1]                                                                 #定义一个list[1]    while True:        yield L                                                           #打印出该list        L=[L[x]+L[x+1] for x in range(len(L)-1)]        #计算下一行中间的值(除去两边的1)        L.insert(0,1)                                                 #在开头插入1        L.append(1)                                                 #在结尾添加1        if len(L)>10:                                                 #仅输出10行            break#生成一个generator对象,然后通过for循环迭代输出每一行a=angel(10)for i in a:    print(i) #结果[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1][1, 5, 10, 10, 5, 1][1, 6, 15, 20, 15, 6, 1][1, 7, 21, 35, 35, 21, 7, 1][1, 8, 28, 56, 70, 56, 28, 8, 1][1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

 

转载地址:http://xikpx.baihongyu.com/

你可能感兴趣的文章
日期设置linux命令学习之 date认识
查看>>
【ML】文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计
查看>>
失业的程序员(一)
查看>>
只能打开一个WORD文档
查看>>
乱码中文javaEE 中文乱码问题
查看>>
提取app中的音频文件 方法
查看>>
(转译)用FFmpeg和SDL写播放器--02输出到屏幕
查看>>
vim配色方案的修改 [转]
查看>>
poj2017
查看>>
Ubuntu命令和快捷键积累
查看>>
android-自定义Seekbar
查看>>
编程之美学习笔记——数字相关(一)
查看>>
DDD:Command模式的好处
查看>>
Android从零开始
查看>>
VisualStudio使用小技巧——快捷键(转)
查看>>
[置顶] Android应用开发之版本更新你莫愁
查看>>
最大连续子序列乘积
查看>>
PostgreSQL的AnynonArray的例子
查看>>
在Visual Studio 2010/2012中 找不到创建WebService的项目模板
查看>>
PHP session的实现原理
查看>>