python 字典item与iteritems的区别详解


Posted in Python onApril 25, 2020

综述迭代器

对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值)。但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式。

另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件,或是斐波那契数列等等。

迭代器更大的功劳是提供了一个统一的访问集合的接口,只要定义了iter()方法对象,就可以使用迭代器访问。

例如:

List = [1,2,3]
L = List.__iter__()
>>> L.next()
1
>>> L.next()
2
>>> L.next()
3

为什么使用迭代器

for i in range(1000): pass
for i in xrange(1000): pass

前一个返回1000个元素的列表,而后一个在每次迭代中返回一个元素,因此可以使用迭代器来解决复用可占空间的问题

class Fab(object): 
 def __init__(self, max): 
 self.max = max
 self.n, self.a, self.b = 0, 0, 1

 def __iter__(self): 
 return self

 def next(self): 
 if self.n < self.max: 
  r = self.b 
  self.a, self.b = self.b, self.a + self.b 
  self.n = self.n + 1
  return r 
 raise StopIteration()

Fab 类通过 next() 不断返回数列的下一个数,内存占用始终为常数 

示例代码2

def fab(max):
 n, a, b = 0, 0, 1
 while n < max:
 yield b
 a, b = b, a + b
 n = n = 1

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!

在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

以上这篇python 字典item与iteritems的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符转换
Sep 06 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
对于Python的Django框架使用的一些实用建议
Apr 03 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
python getpass实现密文实例详解
Sep 24 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 Python
解决reload(sys)后print失效的问题
Apr 25 #Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 #Python
500行python代码实现飞机大战
Apr 24 #Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 #Python
Python3实现飞机大战游戏
Apr 24 #Python
python实现飞船游戏的纵向移动
Apr 24 #Python
python实现俄罗斯方块小游戏
Apr 24 #Python
You might like
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
javascript 播放器 控制
2007/01/22 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
js Date概念详细介绍
2013/11/22 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
Angular中支持SCSS的方法
2017/11/18 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
python如何将图片转换素描画
2020/09/08 Python
python实现图片素描效果
2020/09/26 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
大专生的学习自我评价
2013/12/04 职场文书
委托协议书范本
2014/04/22 职场文书
取保候审保证书
2014/04/30 职场文书
新闻通讯稿范文
2015/07/22 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
对讲机的最大通讯距离是多少
2022/02/18 无线电
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS