python-生成器
生成器
简述
生成器通过函数中的yield表达式来生成,也可以通过生成器解析式来生成
生成器是一个迭代器,但是迭代器不一定是一个生成器
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
举个栗子
from random import randint def fun1(n): for i in range(n): yield i gen1 = fun1(5) print(type(gen1)) #<class 'generator'> for ele in gen1: print(ele) #0 #1 #2 #3 #4
生成器特性
(1)保存执行上下文
def fib(): a, b = 0, 1 while True: yield b a, b = b, a + b gen = fib() print(next(gen)) #1 print(next(gen)) #1 print(next(gen)) #2 print(next(gen)) #3 print(next(gen)) #5 print(next(gen)) #8 print(next(gen)) #13 print(next(gen)) #21
(2)利用next函数与调用的代码进行交互
生成器解析
gen = (i for i in range(10)) print(gen) #<generator object <genexpr> at 0x00000000020B01B0> print(type(gen)) #<class 'generator'> print(next(gen)) #0 print(next(gen)) #1
应用场景
每次你需要返回一个序列的函数或在循环中运行的函数时,都应该考虑到生成器
栗子1
使用生成器的数据流缓冲
使用这些数据的第三方代码可以暂停、恢复、和停止生成器,在开始这一过程之前无需导入所有的数据
栗子2
对于基于某些序列的数据转换算法,生成器有助于降低算法的复杂度并提高效率

更多精彩