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脚本实现代码行数统计代码分享
Mar 10 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
flask框架中勾子函数的使用详解
Aug 01 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
在django模板中实现超链接配置
Aug 21 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python扫描端口的实现
Jan 25 Python
python 三边测量定位的实现代码
Apr 22 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
深入理解python中的闭包和装饰器
2016/06/12 Python
python实现神经网络感知器算法
2017/12/20 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
python中scikit-learn机器代码实例
2018/08/05 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
通过实例学习Python Excel操作
2020/01/06 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python设置中文界面实例方法
2020/10/27 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
高分子材料个人求职信范文
2013/09/25 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
班主任工作实习计划
2015/01/16 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
公司欠款证明
2015/06/24 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记