文档章节

零基础学python-19.10 生成器是单迭代器

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 458
阅读 4
收藏 0

这一章节我们来结束一下生成器是单迭代器,而不是多迭代器。

我们在之前的章节已经提到过迭代器iter,他是支持多迭代器的

例如:

>>> string='abcde'
>>> iter1=iter(string)
>>> next(iter1)
'a'
>>> iter2=iter(string)
>>> next(iter2)
'a'
>>> next(iter1)
'b'
>>> next(iter2)
'b'
>>>

从代码里面可以看到,iter1与iter2分别指向不同的迭代器,返回不同的结果

>>> g=(x**2 for x in range(3))
>>> next(g)
0
>>> iter(g)
<generator object <genexpr> at 0x00BBF378>
>>> iter(g) is g
True
>>> next(iter(g))
1
>>>

从上面的代码可见,生成器支持迭代协议,本身就是迭代器,而且只支持一次活跃迭代,不支持多迭代。

我们下面将再举一个例子:

>>> g=(x*4 for x in 'abcde')
>>> next(g)
'aaaa'
>>> iter1=iter(g)
>>> next(iter1)
'bbbb'
>>> iter2=iter(g)
>>> next(iter2)
'cccc'
>>>

上面我们举的是生成器表达式的例子,同理,表达式函数也是一样

>>> def test():
	for x in range(5):
		yield x

		
>>> g=test()
>>> next(g)
0
>>> iter1=iter(g)
>>> next(iter1)
1
>>> iter2=iter(g)
>>> next(iter2)
2
>>>

而且,对于内置类型支持多迭代器,并且在一个迭代器中传递并反映它们的原处修改。

>>> L=[1,2,3,4,5]
>>> iter1=iter(L)
>>> next(iter1)
1
>>> iter2=iter(L)
>>> next(iter2)
1
>>> del L[2:]
>>> next(iter1)
2
>>> next(iter1)
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    next(iter1)
StopIteration
>>> next(iter2)
2
>>> next(iter2)
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    next(iter2)
StopIteration
>>>

从上面的代码可以看见,当列表原处修改了,也会影响迭代器返回的值。

 

总结,这一章节我们介绍了生成器是单迭代器

这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/raylee2007/article/details/48917725

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
更深入的理解 Python 中的迭代

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

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

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

xinet
2017/08/12
0
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
基于编程人员Python学习第一章节

基于廖雪峰的python零基础学习后,自我总结。适用于有一定基础的编程人员,对我而言,则是基于.net已有方面,通过学习,记录自我觉得有用的地方,便于后续回顾。 主要以快速定位内容,通过直...

Aikenwu
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下单接口调优实战,性能提高10倍

概述 最近公司的下单接口有些慢,老板担心无法支撑双11,想让我优化一把,但是前提是不允许大改,因为下单接口太复杂了,如果改动太大,怕有风险。另外开发成本和测试成本也非常大。对于这种...

Sam哥哥聊技术
19分钟前
1
0
rabbitMQ的安装和配置

在Windows下进行rabbitMQ的安装 第一步:软件下载 在安装rabbitMQ之前,需要先安装Erlang。 Erlang官网:http://www.erlang.org/downloads rabbitMQ官网:http://www.rabbitmq.com/download....

狼王黄师傅
39分钟前
2
0
SAP产品的Field Extensibility

SAP开发人员的工作职责,除了实现软件的功能性需求外,还会花费相当的精力实现一些非功能性需求,来满足所谓的SAP Product Standard(产品标准)。这些产品标准,包含在SAP项目实施中大显身手...

JerryWang_SAP
44分钟前
1
0
Vue-Element-Upload

记录一下文件上传封装Js 代码示例 封装:uploadFile.vue <template> <el-upload v-model="attachment" ref="upload" class="upload-demo" :action="uploadUrl" ......

华山猛男
52分钟前
2
0
AWVS破解及使用手册

1.安装 因为是windows软件,比较简单,此部分略: 破解插件下载: 链接: https://pan.baidu.com/s/1x9LK9F3KvqDgTvXDjoSZnQ 提取码: 7k4u 2.创建扫描目标 2-1.Targets->Add Target 2-2.对话框...

硅谷课堂
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部