python中yield的用法
demo1
def foo(): print("starting...") while True: res = yield 4 print("res:",res) g = foo() print(next(g)) print("*"*20) print(next(g))
输出
starting... 4 ******************** res: None 4
demo2
使用send传递一个值到yield的那行,于是res=7
def foo(): print("starting...") while True: res = yield 4 print("res:",res) g = foo() print(next(g)) print("*"*20) print(g.send(7))
输出
starting... 4 ******************** res: 7 4
demo3
使用生成器的场景,你有一个10000个元素的列表要处理,如果用List的话,会占用更大的空间,比如说取0,1,2,3,4,5,6............10000
这个时候range(10000)就默认生成一个含有10000个数的list了,所以很占内存。
这个时候你可以用刚才的yield组合成生成器进行实现,也可以用range(10000)这个生成器实现
def foo(num): print("starting...") while num<10: num=num+1 yield num for n in foo(0): print(n)
输出
starting... 1 2 3 4 5 6 7 8 9 10
参考:
https://blog.csdn.net/mieleizhi0522/article/details/82142856