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获取当前计算机cpu数量的方法
Apr 18 Python
python实现杨辉三角思路
Jul 14 Python
Python实现图片转字符画的示例代码
Aug 21 Python
浅析python继承与多重继承
Sep 13 Python
python中退出多层循环的方法
Nov 27 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
Tensorflow 多线程设置方式
Feb 06 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
基于python实现计算两组数据P值
Jul 10 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python用tkinter开发的扫雷游戏
Jun 01 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 正则匹配函数体
2009/08/25 PHP
深入PHP FTP类的详解
2013/06/13 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php析构函数的简单使用说明
2015/08/24 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
python操作gmail实例
2015/01/14 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
python执行精确的小数计算方法
2019/01/21 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Django xadmin安装及使用详解
2020/10/26 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
会计大学生职业生涯规划书范文
2014/01/13 职场文书
大学生个人自荐信
2014/02/24 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
办公用房租赁协议书
2014/11/29 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA