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中的集合类型知识讲解
Aug 19 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python脚本实时处理log文件的方法
Nov 21 Python
python编程培训 python培训靠谱吗
Jan 17 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
Python装饰器原理与基本用法分析
Jan 07 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
通过实例简单了解python yield使用方法
Aug 06 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
python中requests库+xpath+lxml简单使用
Apr 29 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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
自我评价200字分享
2013/12/17 职场文书
中华魂演讲稿
2014/05/13 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
大学生就业意向书
2015/05/11 职场文书
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis