迭代器是一个更通用的概念:任何对象的类有一个下一个方法(__next__在Python 3)和一个__iter__方法,返回self。

每个生成器都是迭代器,但反之亦然。生成器通过调用具有一个或多个yield表达式(在Python 2.5和更早版本中的yield语句)的函数构建,并且是满足上一段落对迭代器的定义的对象。

你可能想要使用自定义迭代器,而不是一个生成器,当你需要一个有一些复杂的状态维护行为的类,或者想暴露下一个(和__iter__和__init__)之外的其他方法。通常,一个生成器(有时,对于足够简单的需求,一个生成器表达式)是足够的,并且它更容易编码,因为状态维护(在合理的限制内)基本上是“由你完成”的框架被暂停和恢复。

例如,发电机如:

def squares(start, stop):

for i in xrange(start, stop):

yield i * i

generator = squares(a, b)

或等效生成器表达式(genexp)

generator = (i*i for i in xrange(a, b))

将需要更多的代码来构建为自定义迭代器:

class Squares(object):

def __init__(self, start, stop):

self.start = start

self.stop = stop

def __iter__(self): return self

def next(self):

if self.start >= self.stop:

raise StopIteration

current = self.start * self.start

self.start += 1

return current

iterator = Squares(a, b)

但是,当然,与类Squares,你可以轻松提供额外的方法,即。

def current(self):

return self.start

如果你在应用程序中有这样额外的功能的任何实际需要。

python 迭代器 生成器 区别_Python的生成器和迭代器之间的区别相关推荐

  1. python __import__和import区别_Python中import 与__import__() 之间的区别比较

    本篇文章给大家带来的内容是关于Python中import 与__import__() 之间的区别比较,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先来说一下两者的区别: impo ...

  2. python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别

    生成器是一种特殊的迭代器,生成器自动实现了"迭代器协议"(即__iter__和next方法),不需要再手动实现两方法. 首先从字面意思来解释Iterable和Iterator的区别 ...

  3. python生成日志文件_Python 日志生成器

    需求分析 网站日志需求分析 由于缺乏真实网站日志,在这里用 Python 2.7.5 构建日志生成器模拟网站日志,作为之后实验的基础. 之后的实验为用 Flume 采集网站的日志信息,基于此做一系列的 ...

  4. python实例方法、类方法、静态方法的区别_Python 实例方法、类方法、静态方法的区别与作用...

    Python 实例方法.类方法.静态方法的区别与作用 一.总结 一句话总结: 实例方法:第一个参数必须是实例对象,该参数名一般约定为"self",通过它来传递实例的属性和方法(也可 ...

  5. python迭代器是什么_python中什么是迭代器

    本文主要讲解python中的迭代器Iterator. 什么是迭代器 迭代器是访问可迭代对象的工具 迭代器是指用iter(obj)函数返回的对象(实例) 迭代器是指用next(it)函数获取可迭代对象的 ...

  6. python的元组和列表什么区别_Python 中列表和元组有哪些区别?

    看过了所有的区别,然而所有的区别都基本毫无意义,tuple元组的设计基本是python语言中一个完全失败和错误的设计,然而我们所有人都只敢小说地说啊它们之间有区别,没有人敢说它们没有区别,是因为这是一 ...

  7. python观察日志(part20)--列表中加号,extend,append之间的区别

    学习笔记,仅供参考,有错必纠 列表中"+"加号,extend,append之间的区别 extend extend函数用于在列表末尾一次性追加另一个序列中的多个值. append a ...

  8. 脚本语言和编程语言的区别_编程语言和脚本语言之间的区别

    脚本语言和编程语言的区别 A programming language is a language used to write set of instructions to perform a tas ...

  9. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

    Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...

  10. 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc

    手工会计与计算机会计之间的区别 手工记账与电算化记账的区别 1.运算工具不同传统手工会计运算工具是算盘或电子计算器等,计算过程每运算一次要重复一次,由于不能存储运算结果,人要边算边记录,工作量大,速度 ...

最新文章

  1. 浮点数的运算为什么更慢
  2. DNS原理及其解析过程(转)
  3. 安装ubuntu后要做的几件事
  4. SAP Commerce Cloud Build Manifest Components
  5. why we need createBindingContext in SAP UI5
  6. 从提香到戈雅:西班牙普拉多博物馆藏画展
  7. mysql键太长_数据库,主键为何不宜太长长长长长长长长?(转)
  8. PyQt5笔记(03) -- 消息框
  9. C++设计模式——从多态到观察者模式到MVC架构
  10. mac securecrt无法记住密码的解决方法
  11. 微软在华推广Win7拒绝“黑屏”
  12. npm install报错ERR code ETIMEDOUT的解决办法
  13. Mirillis Action! v4.17.0 高清游戏视频录制软件
  14. macd是什么意思?散户股民如何使用MACD应对证券牛市市场
  15. 【深度学习】YOLOv7目标检测模型使用记录 yolov7-tiny
  16. 《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法
  17. 软件工程(三)——敏捷开发和理解需求
  18. 【学习笔记之Openlayers3】要素保存篇(第四篇)
  19. [Python公开课]零基础玩转Python基础篇----第四节:Python的字符串
  20. 关于这些年做的 图片上传下载做的处理总结(including根据图片url上传文件)

热门文章

  1. (超详细)算法学习:STL和基本数据结构
  2. 鸡兔同笼(一道明显的体现cin和cout运行较慢的特点)
  3. apache2 python mysql_Ubuntu配置Django+ Apache2+ mysql
  4. PyTorch(CNN+MNIST测试)
  5. server2012文件服务器的开始按钮,Windows Server 2012实用技巧集锦
  6. 谷歌浏览器的笔记在哪里_selenium学习笔记之启动谷歌浏览器
  7. 【UVa11178】Morley's Theorem(向量旋转+直线交点)
  8. 计算机语言学翁富良,形式语言与自动机的关系
  9. python tkinter 定时_如何使用tkinter创建计时器?
  10. 微服务、容器、云原生、Kubernetes、SOA、PaaS平台、Devops 之间的关系