python生成器,可迭代对象,迭代器区别和联系


Posted in Python onFebruary 04, 2018

生成器,可迭代对象,迭代器之间究竟是什么关系?

用一幅图来概括:

python生成器,可迭代对象,迭代器区别和联系

1.生成器

定义生成器

方式一:

//区别于列表生成式 gen = [x*x for x in range(5)]
gen = (x*x for x in range(5)) 
print(gen) //Out:<generator object <genexpr> at 0x00000258DC5CD8E0>

方式二:

def fib():
  prev, curr = 0, 1
  while True:
    yield curr
    prev, curr = curr, curr + prev
f = fib()
print(f) //Out:<generator object fib at 0x00000258DC5CD150>

定义成功后,我们可以利用next()访问生成器下一个元素

print(next(gen)) //0
print(next(gen)) //1
...
print(next(gen)) //16
print(next(gen)) //StopIteration

但一般用for循环遍历

for n in gen:
  print(n) //0 1 4  9 16

2.迭代器

任何实现了__iter__和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一个值。所以生成器是特殊的迭代器,她内部具有这两种方法。

一个自定义的迭代器如下:

class Fib:
  def __init__(self):
    self.prev = 0
    self.curr = 1
 
  def __iter__(self):
    return self
 
  def __next__(self):
    value = self.curr
    self.curr += self.prev
    self.prev = value
    return value
f = Fib() 
count = 1 
for n in f:
  print(n)
  count = count+1
  if count>=10:
    break
//Out:1 1 2 3 5 8 13 21 34

3.可迭代对象

像list,tuple,set,dict,str等可以直接作用于for循环的对象,称为可迭代对象。可迭代对象实现了__iter__方法,用于返回迭代器。

demo = [1,2,3,4]
print(isinstance(demo, Iterable)) //True
iter_object = iter(demo)
print(iter_object) //<list_iterator object at 0x00000258DC5EF748>

 

Python 相关文章推荐
python算法学习之计数排序实例
Dec 18 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
Python中的推导式使用详解
Jun 03 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
Python yield与实现方法代码分析
Feb 06 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
Python sep参数使用方法详解
Feb 12 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
python实现mysql的读写分离及负载均衡
Feb 04 #Python
python负载均衡的简单实现方法
Feb 04 #Python
python爬虫爬取某站上海租房图片
Feb 04 #Python
Python爬虫实现百度图片自动下载
Feb 04 #Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 #Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 #Python
numpy.random.seed()的使用实例解析
Feb 03 #Python
You might like
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
浅谈js中的this问题
2017/08/31 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Python for循环及基础用法详解
2019/11/08 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
会计毕业生自荐信
2013/11/21 职场文书
绩效专员岗位职责
2013/12/02 职场文书
护士毕业生自荐信
2014/02/07 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
新闻编辑求职信
2014/04/09 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
会计工作岗位职责
2015/02/03 职场文书
中学生自我评价范文
2015/03/03 职场文书