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生成指定长度的随机数密码
Jan 23 Python
Python程序设计入门(5)类的使用简介
Jun 16 Python
python实现封装得到virustotal扫描结果
Oct 05 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
python实现大文件分割与合并
Jul 22 Python
Python学习笔记之While循环用法分析
Aug 14 Python
python 内置函数汇总详解
Sep 16 Python
python实现按关键字筛选日志文件
Dec 24 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
Python函数对象与闭包函数
Apr 13 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获取mysql版本的几种方法小结
2008/03/25 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
js模拟类继承小例子
2010/07/17 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
python re模块findall()函数实例解析
2018/01/19 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
python定义类的简单用法
2020/07/24 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
教师实习自我鉴定
2013/12/13 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
七夕活动策划方案
2014/08/16 职场文书
2014年标准化工作总结
2014/12/17 职场文书
借条如何写
2015/05/26 职场文书
新闻通讯稿模板
2015/07/22 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL