这里涉及几个知识点:迭代器、生成器、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-迭代器与生成器的区别的更多相关文章

  1. python 迭代器和生成器的区别

    迭代器(iterator)是一个实现了迭代器协议的对象,python的一些内置数据类型(列表,数组,字符串,字典等)都可以通过for语句进行迭代,我们也可以自己创建一个容器,实现了迭代器协议,可以通过 ...

  2. Python: 迭代器与生成器小结

    迭代器与生成器的区别: 1. 迭代器由Class对象创建. 生成器由包含yield表达的Function对象或者Generator Expression创建. 2. 迭代器的原理: (1)由Itera ...

  3. Python 迭代器和生成器(转)

    Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...

  4. 一文搞懂Python迭代器和生成器

    很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...

  5. Python - 迭代器与生成器 - 第十三天

    Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...

  6. 怎么理解Python迭代器与生成器?

    怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下:         ...

  7. python中迭代器和生成器的区别

    #!/usr/bin/python def power(values): for value in values: print "powing %s" % value yield ...

  8. python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句

    我刚开始学习编程没多久,对于很多知识还完全不知道,而有些知道的也是一知半解,我想把学习到的知识记录下来,一是弥补记忆力差的毛病,二也是为了待以后知识能进一步理解透彻时再回来做一个补充. 参考链接: 完 ...

  9. Python迭代器和生成器你学会了吗?

    在了解什么是迭代器和生成器之前,我们先来了解一下容器的概念.对于一切皆对象来说,容器就是对象的集合.例如列表.元祖.字典等等都是容器.对于容器,你可以很直观地想象成多个元素在一起的单元:而不同容器的区 ...

  10. Python迭代器,生成器--精华中的精华

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...

随机推荐

  1. 精通Docker的50个必备教程、工具、资源

    Docker 已经震惊了软件开发界.它提供了一种根据 DevOps 方法打包和输送应用程序的便捷方法. 最近我们发布了 51 个必备的 Docker 工具列表①,但工具不是完全精通容器化所需的唯一东西 ...

  2. 使用jquery插件ajaxfileupload一次上传多个文件,示例

    @{ ViewBag.Title = "Index"; Layout = ""; } <!DOCTYPE html PUBLIC "-//W3C ...

  3. 了解HTTP协议栈(实践篇)

    关于http协议的理论知识,我在这里就不详细说明了,具体下面给出的链接有.接下来都是用具体的操作显示的,各位可以结合起来看. 一.使用nc打开端口,并使用浏览器进行访问 (对应文章中的HTTP协议详解 ...

  4. tcp拥堵算法

    http://m.blog.csdn.net/article/details?id=6739189

  5. Nexus 搭建maven 私有仓库

    nexus如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如 ...

  6. 服务器搭建5 Samba实现文件共享

    Samba服务器工作原理 客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限, ...

  7. Linux内核分析:recv、recvfrom、recvmsg函数实现

    先看一下这三个函数的声明: #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, vo ...

  8. 取出csv文件中的中文评论数据

    # -*- coding: utf-8 -*- import csv import re csvfile = 'weibo.csv' def columns_data(path, column): c ...

  9. js获取系统的根路径实现介绍

    js如何获取系统的根路径,在本文给出了详细的方法 function getBasePath(){ var obj=window.location; var contextPath=obj.pathna ...

  10. python unicode to str and str to unicode

    @staticmethod def unicode2str(p_unicode): v = p_unicode.encode('unicode-escape').decode('string_esca ...