生成器知识点整理

it2022-05-05  127

列表生成式

a = [i + 1 for i in range(10)]

生成器(generator)

一边循环,一边计算的机制一种数据类型,这种数据类型自动实现了迭代器协议,是一个可迭代对象。实现延迟计算,按需执行,节省内存

生成器分类

生成器函数,使用yield返回结果和挂起状态生成器表达式,生成器返回按需生产结果的对象,用for循环或者next()方法调用。

yield

一个函数定义中包含yield,那么调用这个函数就是一个generatorreturn在生成器里,代表生成器的终止,报StopIteration错误

yield的作用

yield可以返回生成器内部数据挂起当前函数执行过程继承当前状态再次调用生成器,从上次挂起的位置继续执行

生成器的send方法

yield可以接收函数外部信号

generator.send(sign)的作用

唤醒generator,并继续执行发送一个信息到生成器内部

生成器调用方法

next()调用

for循环调用

能获取yield的返回获取不到return语句的返回值需要获取return,必须捕获StopIteration错误,返回值包含在StopIteration.value

可迭代对象(Iterable)

可以直接作用于for循环的对象统称为可迭代对象数据集合(list、tuple、dict、set、fronzset、str)生成器 generator

迭代器(Iterator)

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

迭代器表示的是一个数据流,可以把这个数据流看做一个有序序列,但不能提前知道长度

next()的使用

next(Iterator)Iterator.__next__()

数据集合和生成器

都是可迭代对象(Iterable)生成器是一个有序数据流,可以表示无限大的数据流数据集合是有限长度都可以for循环调用只有生成器可以被_next()_调用

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

>>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False

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

>>> from collections import Iterator >>> isinstance((x for x in range(10)), Iterator) True >>> isinstance([], Iterator) False >>> isinstance({}, Iterator) False >>> isinstance('abc', Iterator) False

转载于:https://www.cnblogs.com/chacecai/p/8963539.html


最新回复(0)