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查看微信好友是否删除自己
Dec 19 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
通过python3实现投票功能代码实例
Sep 26 Python
python字典排序的方法
Oct 12 Python
Python time库基本使用方法分析
Dec 13 Python
python 追踪except信息方式
Apr 25 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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 cc攻击代码与防范方法
2012/10/18 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
"引用"与多态的关系
2013/02/01 面试题
C#笔试题和英文面试题
2013/02/07 面试题
民事授权委托书范文
2014/08/02 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
毕业实习单位意见
2015/06/04 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
JS函数式编程实现XDM一
2022/06/16 Javascript
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android