网站建设与管理设计,WordPress开启自带redis,网页编辑按键,wordpress4.7更新说明目录1.生成器基本概念2.生成器的创建方式3.生成器的输出方式4.send()方法5.关闭生成器6.注意事项1.生成器基本概念
是一个特色的迭代器#xff08;迭代器的抽象层级更高#xff09;所以拥有迭代器的特性 惰性计算数据 节省内存 ----就是不是立马生成所有数据#xff0c;而是…
目录1.生成器基本概念2.生成器的创建方式3.生成器的输出方式4.send()方法5.关闭生成器6.注意事项1.生成器基本概念
是一个特色的迭代器迭代器的抽象层级更高所以拥有迭代器的特性 惰性计算数据 节省内存 ----就是不是立马生成所有数据而是到需要数据的时候在生成能够记录状态 并通过next()函数访问下一个状态具备可迭代特性 自己编写一个迭代器比较复杂需要实现很多方法所以就有了一个生产器
2.生成器的创建方式
方式一 生成器表达式 把列表推导式的[]修改成 方式二 生成器函数 函数中包含yield语句这个函数的执行结构就是“生成器”
#列表推导式 方式一
l [i for i in range(1,100) if i % 2 0]
#生成 1-100之间的偶数组成的列表
#此时的列表推导式 是一次性生成所有的数据如果使用生成器就不是一次性生成所有数据而是等到使用的时候才会创建。
print(l)#输出 2 4 6 8 .....#生成器
l (i for i in range(1,100) if i % 2 0)
print(l)#输出generator object genexpr at 0x000001B0DA075700
#此时不会直接生成数据
#只有使用 next()才可以访问
print(next(l))#输出2
print(next(l))#输出4
#也可以使用 for in 循环访问#生成器函数
def test():print(xxx)yield 1print(a)yield 2print(b)yield 3print(c)yield 4print(d)
g test()#此时test函数没有被执行
print(g)#输出 generator object test at 0x000002698C3B4A00
print(next(g))# xxx 1
print(next(g))#a 2
#test函数形成一个生成器(迭代器)每次执行都到yield停止,并返回 yield 后面的数据3.生成器的输出方式
生成器具备迭代器的特性使用next()函数 等价于 生成器._ next _ ()for in
4.send()方法
send方法有一个参数指定的是上一次被挂起的yield语句的返回值相比于 . _ next _() 可以额外的给yield语句传值注意第一次调用 t.send(None)
def test():print(XXX)res1 yield 1print(res1)res2 yield 2print(res2)res3 yield 3print(res3)
g test()
print(g.__next__())#输出 XXX 1
print(g.__next__())#输出 None 2 此时的None是res1没有接收到数据 因为上一次走到yield 就停止了 res1没有接收数据
print(g.send(ooo))#输出 ooo 35.关闭生成器
g.close()后续如果继续调用会抛出StopIteration异常提示
def test():yield 1print(a)yield 2print(b)yield 3print(c)
g test()
print(g.__next__())#输出 1
print(g.__next__())#输出 a 2
print(g.__next__())#输出 b 3
print(g.__next__())#输出 c
print(g.__next__())#输出 报错 StopIteration#如果是这样
print(g.__next__())#输出 1
print(g.__next__())#输出 a 2
g.close()
print(g.__next__())#输出 报错 StopIteration6.注意事项
如果碰到return 会直接终止抛出StopIteration异常生产器只会遍历一次