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 28 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
Django时区详解
Jul 24 Python
Python配置文件处理的方法教程
Aug 29 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python打开使用的方法
Sep 30 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
python opencv进行图像拼接
Mar 27 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
pyenv命令管理多个Python版本
2017/03/26 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
自荐信的基本格式
2014/02/22 职场文书
校园活动宣传方案
2014/03/28 职场文书
母校寄语大全
2014/04/10 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
白酒营销策划方案
2014/08/17 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
MySQL常用慢查询分析工具详解
2022/08/14 MySQL