python-迭代器与生成器的区别
这里涉及几个知识点:迭代器、生成器、yieId
先用个例子看一下迭代器与生成器的区别吧
#L是个list,迭代用for循环即可,L取出来是存放在内存中的,再多次去循环取出都可以
>>> L=[x*x for x in range(3)]
>>> for i in L:
print(i) 0
1
4
>>> for n in L:
print(n) 0
1
4 #把[]换成了()就成了生成器,只不过它只能循环出一次,因为它不是放在内存中的。它是实时生成数据的。
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
print (i) 0
1
4
#看我再循环一次,它已是空值
>>> 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()
1
2
3
4
5
6
>>> 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)
<generator object gen2 at 0x0000000002EAFD00>
>>> for x in g:
print(x) 6
6
7
7
8
8
9
9
10
10
2、其实想想也挺简单,yield只不过就是个标识,同时打印一次该结果
经典案例:杨辉三角
#将杨辉三角的每一行看成一个list,写一个生成器(generator),不断输出下一行list
def 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]
python-迭代器与生成器的区别的更多相关文章
- python 迭代器和生成器的区别
迭代器(iterator)是一个实现了迭代器协议的对象,python的一些内置数据类型(列表,数组,字符串,字典等)都可以通过for语句进行迭代,我们也可以自己创建一个容器,实现了迭代器协议,可以通过 ...
- Python: 迭代器与生成器小结
迭代器与生成器的区别: 1. 迭代器由Class对象创建. 生成器由包含yield表达的Function对象或者Generator Expression创建. 2. 迭代器的原理: (1)由Itera ...
- Python 迭代器和生成器(转)
Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...
- 一文搞懂Python迭代器和生成器
很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...
- Python - 迭代器与生成器 - 第十三天
Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...
- 怎么理解Python迭代器与生成器?
怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下: ...
- python中迭代器和生成器的区别
#!/usr/bin/python def power(values): for value in values: print "powing %s" % value yield ...
- python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句
我刚开始学习编程没多久,对于很多知识还完全不知道,而有些知道的也是一知半解,我想把学习到的知识记录下来,一是弥补记忆力差的毛病,二也是为了待以后知识能进一步理解透彻时再回来做一个补充. 参考链接: 完 ...
- Python迭代器和生成器你学会了吗?
在了解什么是迭代器和生成器之前,我们先来了解一下容器的概念.对于一切皆对象来说,容器就是对象的集合.例如列表.元祖.字典等等都是容器.对于容器,你可以很直观地想象成多个元素在一起的单元:而不同容器的区 ...
- Python迭代器,生成器--精华中的精华
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
随机推荐
- rpm 安装zabbix 注意
# grep zabbix /etc/sudoers zabbix ALL=(ALL) NOPASSWD: /sbin/blockdev
- SM2椭圆曲线公钥密码算法
国家必须要有属于自己的一套加密机制才行...好复杂.分享下看哪位看得懂其中的原理 国家密码管理局于2010年12月17日发布了SM2椭圆曲线公钥密码算法,并要求为对现有基于RSA算法的电子认证系统.密 ...
- 【Java】Java复习笔记-第四部分
反射 反射: 在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...
- 多媒体文件格式解析之MP3
音频文件格式MP3 1. MP3是什么? MP3是MPEG-1 Audio Layer 3的缩写,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户的听觉 ...
- web spring 容器
使用spring的web应用时,不用手动创建spring容器,而是通过配置文件声明式地创建spring容器,因此,在web应用中创建spring容器有如下两种方式: 一.直接在web.xml文件中配置 ...
- AAPT err(Facade for): libpng error: Not a PNG file 错误解决
在导入项目到Android studio后,若编译出现“AAPT err(Facade for): libpng error: Not a PNG file”错误. 该错误表示项目中的drawable ...
- 2. AutoEncoder在NLP中的应用
1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...
- Linux使用redis
在linux遇到这种情况. 注意,这里本redis 用的端口是6389 通过 ps -aux 看到redis 启动了: root ? Ssl Jun14 : redis-server *: root ...
- 在分布式系统里看CAP定理
本文转自:http://zhuanlan.51cto.com/art/201703/534587.htm 计算机界有很多高大上又难于理解的术语,CAP就是其中之一, 什么一致性(Consistency ...
- swift闭包 notes http://www.gittielabs.com
Swift Closureshtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror- ...