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使用递归解决全排列数字示例
Feb 11 Python
Python中操作文件之write()方法的使用教程
May 25 Python
Python之str操作方法(详解)
Jun 19 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
linux查找当前python解释器的位置方法
Feb 20 Python
对Python函数设计规范详解
Jul 19 Python
python实现logistic分类算法代码
Feb 28 Python
python爬虫 requests-html的使用
Nov 30 Python
python实现计算器简易版
Dec 17 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
python实现手机推送 代码也就10行左右
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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
浅谈php://filter的妙用
2019/03/05 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
对python的输出和输出格式详解
2018/12/08 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
python里dict变成list实例方法
2019/06/26 Python
pywinauto自动化操作记事本
2019/08/26 Python
python getpass模块用法及实例详解
2019/10/07 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
python代码实现猜拳小游戏
2020/11/30 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
蜜蜂引路教学反思
2014/02/04 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
同居协议书范本
2014/04/23 职场文书
安全教育培训制度
2015/08/06 职场文书
Python WSGI 规范简介
2021/04/11 Python