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代码来绘制彭罗斯点阵的教程
Apr 03 Python
Python 实现简单的电话本功能
Aug 09 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
详解django2中关于时间处理策略
Mar 06 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
python实现按首字母分类查找功能
Oct 31 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
详解Python中的Lock和Rlock
Jan 26 Python
Python实现对齐打印 format函数的用法
Apr 28 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python线程池threadpool使用篇
2018/04/27 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
什么是方法的重载
2013/06/24 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
读书月活动方案
2014/05/22 职场文书
生日宴会策划方案
2014/06/03 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL