#列表推导式 方式一
l =[i for i inrange(1,100)if i %2==0]#生成 1-100之间的偶数组成的列表#此时的列表推导式 是一次性生成所有的数据,如果使用生成器就不是一次性生成所有数据,而是等到使用的时候才会创建。print(l)#输出 2 4 6 8 .....#生成器
l =(i for i inrange(1,100)if i %2==0)print(l)#输出<generator object <genexpr> at 0x000001B0DA075700>#此时不会直接生成数据#只有使用 next()才可以访问print(next(l))#输出2print(next(l))#输出4#也可以使用 for in 循环访问#生成器函数deftest():print("xxx")yield1print("a")yield2print("b")yield3print("c")yield4print("d")
g = test()#此时test函数没有被执行 print(g)#输出 <generator object test at 0x000002698C3B4A00>print(next(g))# xxx 1print(next(g))#a 2#test函数形成一个生成器(迭代器),每次执行都到yield停止,并返回 yield 后面的数据
deftest():yield1print("a")yield2print("b")yield3print("c")
g = test()print(g.__next__())#输出 1print(g.__next__())#输出 a 2print(g.__next__())#输出 b 3print(g.__next__())#输出 cprint(g.__next__())#输出 报错 StopIteration#如果是这样print(g.__next__())#输出 1print(g.__next__())#输出 a 2
g.close()print(g.__next__())#输出 报错 StopIteration