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常用列表数据结构小结
Aug 06 Python
Python lxml模块安装教程
Jun 02 Python
Django Highcharts制作图表
Aug 27 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
Python3.5运算符操作实例详解
Apr 25 Python
树莓派实现移动拍照
Jun 22 Python
python线程信号量semaphore使用解析
Nov 30 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
pycharm 复制代码出现空格的解决方式
Jan 15 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 文章中的远程图片采集到本地的代码
2009/07/30 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
python获取糗百图片代码实例
2013/12/18 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
用matplotlib画等高线图详解
2017/12/14 Python
python 编码规范整理
2018/05/05 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
简单了解python变量的作用域
2019/07/30 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
python如何保存文本文件
2020/06/07 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
python模块内置属性概念及实例
2021/02/18 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
协议书怎么写
2014/04/21 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
个人道歉信大全
2019/04/11 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python