文档章节

零基础学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
江门
私信 提问
Python3+迭代器与生成器

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

xinet
2017/08/12
0
0
更深入的理解 Python 中的迭代

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

01%
05/26
0
0
Python的迭代器和生成器

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

开元中国2015
2015/07/30
219
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0
关于Python中的yield

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

劲风online
2015/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开发者和架构师之间最大的区别是什么?

1、开发者和架构师之间最大的区别是什么? 架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。 软件架构师的角色需要理解最重要的架构驱动力是什么...

James-
18分钟前
1
0
java框架学习日志-4

补充一些spring配置文件的方法。 设置别名: <!--通过name直接设置别名--> <bean name="user2" class="cn.sxt.factory.UserDynamicFactory"> </bean> <!--有id的情况下也可以设置......

白话
20分钟前
2
0
20181213 上课截图

小丑鱼00
36分钟前
1
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
44分钟前
3
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部