今天的学习内容
生成器generator
- 定义:能够动态(循环一次计算一次返回一次)提供数据的可迭代对象。
- 作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。数据量越大,优势越明显。
- 以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才计算结果,而不是一次构建出所有结果。
- 生成器 --> 迭代器 + 可迭代对象
生成器函数
- 定义:含有yield语句的函数,返回值为生成器对象。
- 语法
– 创建:
def 函数名():
…
yield 数据
…
– 调用:
for 变量名 in 函数名():
语句 - 说明:
– 调用生成器函数将返回一个生成器对象,不执行函数体。
– yield翻译为”产生”或”生成” - 执行过程:
(1) 调用生成器函数会自动创建迭代器对象。
(2) 调用迭代器对象的__next__()方法时才执行生成器函数。
(3) 每次执行到yield语句时返回数据,暂时离开。
(4) 待下次调用__next__()方法时继续从离开处继续执行。 - 原理:生成迭代器对象的大致规则如下
– 将yield关键字以前的代码放在next方法中。
– 将yield关键字后面的数据作为next方法的返回值。
内置生成器
枚举函数enumerate
1.语法:
for 变量 in enumerate(可迭代对象):
语句
for 索引, 元素in enumerate(可迭代对象):
语句
2. 作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
zip
1. 语法:
for item in zip(可迭代对象1, 可迭代对象2….):
语句
2. 作用:将多个可迭代对象中对应的元素组合成一个个元组,生成的元组个数由最小的可迭代对象决定。
生成器表达式
- 定义:用推导式形式创建生成器对象。
- 语法:变量 = ( 表达式 for 变量 in 可迭代对象 [if 真值表达式] )
函数式编程
1.定义:用一系列函数解决问题。
– 函数可以赋值给变量,赋值后变量绑定函数。
– 允许将函数作为参数传入另一个函数。
– 允许函数返回一个函数。
2.高阶函数:将函数作为参数或返回值的函数。
函数作为参数
将核心逻辑传入方法体,使该方法的适用性更广,体现了面向对象的开闭原则。
yield
程序执行过程:
# 调用不执行
# 调用__next__才执行
# 到yield暂时离开
# 再次调用__next__继续执行
# …
程序执行原理: "你看见的代码,实际不是这个样子"
将yield关键字以前的代码定义到next方法中
将yield关键字以后的数据作为next方法返回值
def __iter__(self):
print("准备数据")