文档章节

Python 迭代器和 生成器

MtrS
 MtrS
发布于 2014/12/22 23:19
字数 213
阅读 67
收藏 3

一直以为 Python 的生成器是指 列表生成, 好吧,我读书少。

其实呢,生成器是 使用yield 返回实现了迭代器协议的generator 对象。 如下:

<!-- lang: python -->
	class Data(object):
	def __init__(self, *args):
		self._data = list(args)
	def __iter__(self):
		for x in self._data:
			yield x
    d = Data(1,2,3)
    >>> d.__iter__()
    <generator object __iter__ at 0x7f8556d4cdc8>

在python2 中 使用d.next() 可以返回 d 的下一个值, 在 python3 中 需要使用 d.next() 返回 d 的生成器的下一个值, 生成器可用于 协程够造。

关于迭代器 根据迭代器协议, 需要实现____iter____() 和 next() 两个方法, 前者返回迭代器对象,后者返回数据,直到引发StopIteration 异常结束。

<!-- lang: python -->
class Data(object):
def __init__(self, *args):
    self.data = list(args)
    self.index = 0
def __iter__(self):
    return self
def __next__(self):
    if self.index < len(self.data):
        d =  self.data[self.index]
        self.index +=1
    else:
        raise StopIteration()
    return d

© 著作权归作者所有

共有 人打赏支持
MtrS
粉丝 32
博文 569
码字总数 359284
作品 0
榆林
私信 提问
更深入的理解 Python 中的迭代

深入探讨 Python 的 循环来看看它们在底层如何工作,以及为什么它们会按照它们的方式工作。 Python 的 循环不会像其他语言中的 循环那样工作。在这篇文章中,我们将深入探讨 Python 的 循环来...

01%
2018/05/26
0
0
Python3+迭代器与生成器

转载Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的...

xinet
2017/08/12
0
0
Python的迭代器和生成器

Python的迭代器和生成器 先说迭代器,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter(...

开元中国2015
2015/07/30
219
0
关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实...

劲风online
2015/07/20
0
0
python生成式生成器详细解答

Python得yield关键字,yield是python中的生成器 了解生成器需要先了解什么是生成式,切片的目的是从已有的列表中切出一部分返回,而生成式的目的则是从无到有的构建一个列表 一个生成式的案例...

开源中国段子手
2015/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

什么时候使用字节流、什么时候使用字符流,二者的区别

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 InputStream 和OutputStream,...

watermelon11
29分钟前
2
0
Alpakka Kafka,反应式Kafka客户端

Alpakka Kafka 是一个要用于 Java 和 Scala 语言的开源的流感知和反应式集成数据线项目。它建立在 Akka Stream之上,提供了 DSL 来支持反应式和流式编程,内置回压功能。Akka Streams 是 Re...

羊八井
今天
4
0
PHP7源码编译安装详解

$ yum groupinstall "development tools"$ yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype \freetype-devel libpng libpng-devel libxml2 ......

问题终结者
今天
5
0
Django学习笔记-从创建虚拟环境到启用服务

1 前置条件 windows系统下,目前已经完成anaconda3或miniconda3的安装,这也意味着已经完成了python3的安装。 2 创建虚拟环境 1、通过Anaconda Prompt,使用conda命令创建虚拟环境(base) e...

davidwbnu
昨天
4
0
python学习04:函数的定义及基本使用

python可以像c++一样,可以直接定义函数。具体格式如下: def(关键字) 函数名(形参01,形参02...): do_something... #如果有返回值,则调用以下语句 return 返回值...

太空堡垒
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部