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分割和拼接字符串
Nov 01 Python
Python实现线程池代码分享
Jun 21 Python
Django中使用locals()函数的技巧
Jul 16 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
python同时替换多个字符串方法示例
Sep 17 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
python opencv如何实现图片绘制
Jan 19 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
Python Http请求json解析库用法解析
Nov 28 Python
Python实现视频自动打码的示例代码
Apr 08 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
Oracle 常见问题解答
2006/10/09 PHP
php 时间计算问题小结
2009/01/04 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
php中Ctype函数用法详解
2014/12/09 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
详解python内置模块urllib
2020/09/09 Python
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
教师个人剖析材料
2014/02/05 职场文书
行政部岗位职责范本
2014/03/13 职场文书
英语教师岗位职责
2014/03/16 职场文书
委托书的格式
2014/08/01 职场文书
清洁员岗位职责
2015/02/15 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
CSS基础详解
2021/10/16 HTML / CSS
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python