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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Python编程实现蚁群算法详解
Nov 13 Python
python3实现磁盘空间监控
Jun 21 Python
python中的decorator的作用详解
Jul 26 Python
Python装饰器简单用法实例小结
Dec 03 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 Python
用python批量移动文件
Jan 14 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
python本地文件服务器实例教程
May 02 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中,文件上传
2006/12/06 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
js动态生成指定行数的表格
2013/07/11 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
Python with的用法
2014/08/22 Python
Python pickle模块用法实例分析
2015/05/27 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python实现FM算法解析
2019/06/18 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Python进行特征提取的示例代码
2020/10/15 Python
小学生评语大全
2014/04/18 职场文书
投资建议书模板
2014/05/12 职场文书
产品委托授权书范本
2014/09/16 职场文书
党支部鉴定意见
2015/06/02 职场文书
校长新学期寄语2016
2015/12/04 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
古诗之感恩老师
2019/10/24 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技