python for item in items,python 字典item与iteritems的区别详解
综述迭代器
对于原生支持随机访问的数据结构(如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 for item in items,python 字典item与iteritems的区别详解相关推荐
- python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...
- 【Python】中小括号()、中括号[]、花括号{}的区别详解
Python3中小括号().中括号[].花括号{}的区别详解_python_ https://www.jb51.net/article/199741.htm 在Python语言中最常见的括号有三种,分 ...
- python小括号表示什么数据类型_Python3中小括号()、中括号[]、花括号{}的区别详解...
介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- python loads_python dumps和loads区别详解
这篇文章主要介绍了python dumps和loads区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概念理解 json是一种轻量级的数 ...
- Python str / bytes / unicode 区别详解 - Python零基础入门教程
目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...
- python循环括号_Python3中小括号()、中括号[]、花括号{}的区别详解
介绍 在python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的python基本内置数据类型. 小括号() python中的小括号(): 代 ...
- python中小括号和中括号的区别_Python3中小括号()、中括号[]、花括号{}的区别详解...
介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...
- python frozenset_Python中set与frozenset方法和区别详解
set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元 ...
最新文章
- load balancer 配置参考
- LINUX自旋锁详解
- android备忘录教学_android基础备忘录(一)
- 一文读懂“新一代人工智能地图” ,让AI真正走进用户的生活
- 新兴的多媒体格式——MXF 文件格式分析 和简介
- 用gdb搞清楚一道union相关的面试题
- sublime text插件emmet的用法教程
- sql主键_SQL主键
- 12个强大的Web服务测试工具
- JVM监控及诊断工具GUI篇之JProfiler
- Oracle获取汉字拼音码
- 信号与系统中的信号带宽理解
- wincc安装信息服务器,wincc客户端与服务器配置
- 清除浮动(解决高度坍塌的问题)的方法5种
- 【云驻共创】华为云数据库之大数据入门与应用(全)
- 让女人60岁都不涨皱纹的秘籍
- Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...
- win10清理c盘_系统C盘磁盘空间不够用的解决办法
- 独立电子商务网站运营成本
- Win10怎么卸载.net framework?