生成器 generator
定义:能够动态(循环一次计算一 次返回一次)提供数据的可迭代对象。
作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。数据量越大,优势越明显。
以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才计算结构,而不是一次构建出所有结果
生成器函数
-
定义:含有yield语句函数,返回值为生成器对象。
-
语法:
# 创建
def 函数名():
...
yield 数据
...
# 调用
for 变量名 in 函数名():
语句
- 说明
-
调用生成器函数将返回一个生成器对象
-
yield翻译为“产生”或“生成”
- 执行过程
-
调用生成器函数会自动创建迭代对象。
-
调用迭代器对象的next方法时才执行生成器函数。
-
每次执行到yield语句时返回数据,暂时离开。
-
待下次调用next方法时继续从离开处继续执行。
- 原理:
生成迭代器对象的大致规则如下:
-
将yield关键字以前的代码放在next方法中。
-
将yield关键字后面的数据作为next方法的返回值。
内置生成器
枚举函数 enumerate
语法
for 变量 in enumerate(可迭代对象):
语句
for 索引, 元素 in enumerate(可迭代对象):
语句
作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
zip
语法
for item in zip(可迭代对象1,可迭代对象2….) :
语句
作用:将多个可迭代对象中对应的元素组合成一个个元组,生成的元组长度由长度最短的可迭代对象决定。
生成器表达式
定义:用推导式形式创建生成器对象。
语法
变量 = (item for item in 可迭代对象 if 条件)
面试题∶
请简逑﹐生成器与迭代器
- 生成器本质就是:迭代器+可迭代对象.
- 而可迭代对象就是为了可以迭代( for),而迭代的本质就是不段调用next
- 生成器最重要的特点调用一次next,计算一次结果﹐返回一个值
- #这个过程称之为惰性操作╱延迟操作·
- #在海量数据下,可以大量节省内存.
惰性操作–>立即操作(灵活获取结果)
list(生成器)