综述迭代器

对于原生支持随机访问的数据结构(如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的区别详解相关推荐

  1. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  2. 【Python】中小括号()、中括号[]、花括号{}的区别详解

    Python3中小括号().中括号[].花括号{}的区别详解_python_ https://www.jb51.net/article/199741.htm 在Python语言中最常见的括号有三种,分 ...

  3. python小括号表示什么数据类型_Python3中小括号()、中括号[]、花括号{}的区别详解...

    介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...

  4. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  5. python loads_python dumps和loads区别详解

    这篇文章主要介绍了python dumps和loads区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概念理解 json是一种轻量级的数 ...

  6. Python str / bytes / unicode 区别详解 - Python零基础入门教程

    目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...

  7. python循环括号_Python3中小括号()、中括号[]、花括号{}的区别详解

    介绍 在python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的python基本内置数据类型. 小括号() python中的小括号(): 代 ...

  8. python中小括号和中括号的区别_Python3中小括号()、中括号[]、花括号{}的区别详解...

    介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...

  9. python frozenset_Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元 ...

最新文章

  1. load balancer 配置参考
  2. LINUX自旋锁详解
  3. android备忘录教学_android基础备忘录(一)
  4. 一文读懂“新一代人工智能地图” ,让AI真正走进用户的生活
  5. 新兴的多媒体格式——MXF 文件格式分析 和简介
  6. 用gdb搞清楚一道union相关的面试题
  7. sublime text插件emmet的用法教程
  8. sql主键_SQL主键
  9. 12个强大的Web服务测试工具
  10. JVM监控及诊断工具GUI篇之JProfiler
  11. Oracle获取汉字拼音码
  12. 信号与系统中的信号带宽理解
  13. wincc安装信息服务器,wincc客户端与服务器配置
  14. 清除浮动(解决高度坍塌的问题)的方法5种
  15. 【云驻共创】华为云数据库之大数据入门与应用(全)
  16. 让女人60岁都不涨皱纹的秘籍
  17. Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...
  18. win10清理c盘_系统C盘磁盘空间不够用的解决办法
  19. 独立电子商务网站运营成本
  20. Win10怎么卸载.net framework?

热门文章

  1. Cubist software
  2. (总结)苹果账号、证书、打包、续费
  3. 学软件技术计算机二级考什么,计算机二级考试科目有哪些
  4. 表单识别(五)——票据识别-论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞(上)
  5. 本地存储和cookie
  6. 如何设置谷歌浏览器(Google Chrome)的开发者工具的语言
  7. 用最基础的网络知识去蹭网
  8. Google排名第一的编程语言,收下这份资料,小白也能学的会!
  9. mysql怎么解决1045错误_Navicat for MySQL 1045错误如何解决
  10. matlab布尔代数,数学布尔表达式