0. 概念
- 理解:一种特殊的
迭代器
- 特性
1. 惰性计算数据,节省内存 2. 能够记录状态,并通过 next() 函数,访问下一个状态 3. 具备可迭代特性
1. 创建方式
- 生成器表达式
l = (i for i in range(1, 10000000) if i % 2 == 0) print(next(l)) print(l.__next__()) for i in l: print(i)
- 生成器函数
1. 函数中包含 yield 语句 2. 函数返回值就是生成器 def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() print(next(g)) print(g.__next__()) for i in g: print(i)
2. 获取数据方式
-
next()
def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() print(next(g)) print(next(g)) print(next(g))
-
g.__next__()
def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() print(g.__next__()) print(g.__next__()) print(g.__next__())
-
for in
def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() for i in g: print(i)
3. send
- 形式
""" 作用:可以指定上一次被挂起的 yield 语句的返回值 语法:g.send(value) 注意:第一次调用, g.send(None) """ def generators(): res = yield 1 print("a") print(res) yield 2 print("b") yield 3 print("c") g = generators() print(g.send(None)) print(g.send(66666))
4. close
- 形式
""" 作用:关闭生成器 语法:g.close() 注意:后续若继续获取数据, 会报出 StopIteration 异常提示 """ def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() print(g.__next__()) print(g.__next__()) g.close() print(g.__next__())
- 注意
1. 遇到 return, 会直接终止获取数据; 后续若继续获取数据, 会报出 StopIteration 异常提示 def generators(): yield 1 print("a") yield 2 print("b") return yield 3 print("c") g = generators() print(g.__next__()) print(g.__next__()) print(g.__next__()) 2. 生成器只会遍历一次 def generators(): yield 1 print("a") yield 2 print("b") yield 3 print("c") g = generators() for i in g: print(i) g = generators() for i in g: print(i)
网友评论