#列表推导式 方式一
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)#输出 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)#输出
print(next(g))# xxx 1
print(next(g))#a 2
#test函数形成一个生成器(迭代器),每次执行都到yield停止,并返回 yield 后面的数据
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 3
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__())#输出 报错 StopIteration
上一篇:ATAC-seq 数据分析实战
下一篇:Web4:实战(用户登录)