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专用方法与迭代机制实例分析
Sep 15 Python
基于Python的接口测试框架实例
Nov 04 Python
Python3匿名函数用法示例
Jul 25 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
python微信智能AI机器人实现多种支付方式
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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
Yii清理缓存的方法
2016/01/06 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
python实现的各种排序算法代码
2013/03/04 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
Django卸载之后重新安装的方法
2017/03/15 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
微信跳一跳python代码实现
2018/01/05 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
购买大码女装:Lane Bryant
2016/09/07 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers