
如何更好地理解Python迭代器和生成器
展开全部
两者做产生的作业不同
1、Python迭代器
Python迭代器仅是一容器对象,它实现了迭代器协议。
2、从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码。
1、Python迭代器
Python迭代器仅是一容器对象,它实现了迭代器协议。
2、从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来举例:
当一个txt文件有几万行的时候,你是用cat ,会发现屏幕不停的刷不停的刷,影响你正常阅读。
这时候你需要使用more来一页一页阅读。
同样的道理,当文件被读入到内存时候,如果数据太大,会导致内存被占用过多。这时候需要一个向more的功能一次读取一点,这个就是迭代器的功能。
那么怎么样才能有这样的功能存在呢?这就是生成器的作用。让cat aa.txt通过生成器变成more aa.txt的效果。
当一个txt文件有几万行的时候,你是用cat ,会发现屏幕不停的刷不停的刷,影响你正常阅读。
这时候你需要使用more来一页一页阅读。
同样的道理,当文件被读入到内存时候,如果数据太大,会导致内存被占用过多。这时候需要一个向more的功能一次读取一点,这个就是迭代器的功能。
那么怎么样才能有这样的功能存在呢?这就是生成器的作用。让cat aa.txt通过生成器变成more aa.txt的效果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需求是否可以描述的更具体些?
我的理解是在一切定义中的值、函数、迭代器都是空的。比如你定义这个函数:
这里迭代器被声明出来,但是没有被赋值运行,我就可以理解此迭代器为空的迭代器,只有你使用readfile('test.txt'),迭代器才不会空,不知道是不是你的意思。
追问:
我在看那个python基础教程,关于递归生成器,这有个程序能把嵌套的列表展开,比如[[1,2],3],展开成1,2,3,程序代码,我要不给你发私信,追问有字数限制
我发现如果我把flatten里的yield element 换成 print element,依然可以打印出正确的结果, 但是没有test输出,说明for循环里print test没执行,所以我想,是不是改完后那是一个空的生成器?
追答:
哦,原来是这个啊,你这里对概念没理解……你如果对堆栈有点概念,你可以把这个生成器当作是一个LIFO的栈来理解。我尽可能给你掰开了揉碎了讲,不过你多少还是需要知道一些堆栈的概念,因为python本来就是个“大堆栈处理器”……那么开始……
我特别反感国内的Python入门书,总是喜欢为了显得权威写的乱七八糟的……
那么,开始吧……
一不留神话痨了,超过了字数。我把它重新整理了一下,草草的排了版存成PDF,希望这点个人见解可以对你有所帮助:
网盘下载:
http://pan.baidu.com/s/1pJtJzdT
我的理解是在一切定义中的值、函数、迭代器都是空的。比如你定义这个函数:
这里迭代器被声明出来,但是没有被赋值运行,我就可以理解此迭代器为空的迭代器,只有你使用readfile('test.txt'),迭代器才不会空,不知道是不是你的意思。
追问:
我在看那个python基础教程,关于递归生成器,这有个程序能把嵌套的列表展开,比如[[1,2],3],展开成1,2,3,程序代码,我要不给你发私信,追问有字数限制
我发现如果我把flatten里的yield element 换成 print element,依然可以打印出正确的结果, 但是没有test输出,说明for循环里print test没执行,所以我想,是不是改完后那是一个空的生成器?
追答:
哦,原来是这个啊,你这里对概念没理解……你如果对堆栈有点概念,你可以把这个生成器当作是一个LIFO的栈来理解。我尽可能给你掰开了揉碎了讲,不过你多少还是需要知道一些堆栈的概念,因为python本来就是个“大堆栈处理器”……那么开始……
我特别反感国内的Python入门书,总是喜欢为了显得权威写的乱七八糟的……
那么,开始吧……
一不留神话痨了,超过了字数。我把它重新整理了一下,草草的排了版存成PDF,希望这点个人见解可以对你有所帮助:
网盘下载:
http://pan.baidu.com/s/1pJtJzdT
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询