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中移动目录结构的方法
Jan 31 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
Python饼状图的绘制实例
Jan 15 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
python使用rsa非对称加密过程解析
Dec 28 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
python实现批量转换图片为黑白
Jun 16 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
Python wordcloud库安装方法总结
Dec 31 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python 正则式使用心得
2009/05/07 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
详解python3中tkinter知识点
2018/06/21 Python
flask中的wtforms使用方法
2018/07/21 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python对wav文件的重采样实例
2020/02/25 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
新驾驶员个人自我评价
2014/01/03 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
个人投资计划书
2014/05/01 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
2016年端午节寄语
2015/12/04 职场文书
了解Redis常见应用场景
2021/06/23 Redis
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript