全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

python生成器表达式

发布时间:2023-11-07 20:27:59
发布人:xqq

生成器表达式来源于迭代和列表解析的组合,生成器和列表解析类似,但是它使用尖括号而不是方括号

>>>#列表解析生成列表

>>>[x**3forxinrange(5)]

[0,1,8,27,64]

>>>

>>>#生成器表达式

>>>(x**3forxinrange(5))

at0x000000000315F678>

>>>#两者之间转换

>>>list(x**3forxinrange(5))

[0,1,8,27,64]

一个迭代既可以被写成生成器函数,也可以被协程生成器表达式,均支持自动和手动迭代。而且这些生成器只支持一个active迭代,也就是说生成器的迭代器就是生成器本身。

迭代器(迭代就是循环)

迭代器包含有next方法的实现,在正确的范围内返回期待的数据以及超出范围后能够抛出StopIteration的错误停止迭代。

我们已经知道,可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如list,tuple,dict,set,str等

一类是generator,包括生成器和带yield的generatorfunction

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

可以使用isinstance()判断一个对象是否为可Iterable对象

>>>fromcollectionsimportIterable

>>>isinstance([],Iterable)

True

>>>isinstance({},Iterable)

True

>>>isinstance('abc',Iterable)

True

>>>isinstance((xforxinrange(10)),Iterable)

True

>>>isinstance(100,Iterable)

False

而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。

所以这里讲一下迭代器

一个实现了iter方法的对象是可迭代的,一个实现next方法并且是可迭代的对象是迭代器。

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

所以一个实现了iter方法和next方法的对象就是迭代器。

可以使用isinstance()判断一个对象是否是Iterator对象:

>>>fromcollectionsimportIterator

>>>isinstance((xforxinrange(10)),Iterator)

True

>>>isinstance([],Iterator)

False

>>>isinstance({},Iterator)

False

>>>isinstance('abc',Iterator)

False

生成器都是Iterator对象,但list、dict、str虽然是Iterable(可迭代对象),却不是Iterator(迭代器)。

把list、dict、str等Iterable变成Iterator可以使用iter()函数:

>>>isinstance(iter([]),Iterator)

True

>>>isinstance(iter('abc'),Iterator)

True

你可能会问,为什么list、dict、str等数据类型不是Iterator?

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

以上内容为大家介绍了python生成器表达式,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

python培训

相关文章

python socket网络编程之粘包问题详解

python socket网络编程之粘包问题详解

2023-11-07
Python中关于OPP的常用术语

Python中关于OPP的常用术语

2023-11-07
Python 面向对象的软件开发

Python 面向对象的软件开发

2023-11-07
Python 抽象类

Python 抽象类

2023-11-07

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取