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 变量类型及命名规则介绍
Jun 08 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
python使用matplotlib绘制折线图教程
Feb 08 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
Python小进度条显示代码
Mar 05 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python logging日志模块 配置文件方式
Jul 12 Python
聊聊python中的循环遍历
Sep 07 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
七个Python必备的GUI库
Apr 27 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
详解python进行mp3格式判断
2016/12/23 Python
python使用mysql的两种使用方式
2018/03/07 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python实现画出e指数函数的图像
2019/11/21 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
关键字final的用法
2013/10/02 面试题
恶意软件的定义
2014/11/12 面试题
2017寒假社会实践心得体会范文
2016/01/14 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python