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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
python实现的文件夹清理程序分享
Nov 22 Python
详解Python中DOM方法的动态性
Apr 11 Python
Python变量和字符串详解
Apr 29 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
python 识别图片中的文字信息方法
May 10 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
Django models filter筛选条件详解
Mar 16 Python
python实现移动木板小游戏
Oct 09 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生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
详解VueJs中的V-bind指令
2018/05/03 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
Python 深入理解yield
2008/09/06 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python实现简单坦克大战
2020/03/27 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
七年级英语教学反思
2014/01/15 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
python for循环赋值问题
2021/06/03 Python
美元符号 $
2022/02/17 杂记
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js