yield函数

20221123

为什么引入yield

  1. 节省内存,即用即取

每次调用,执行到yield行return一个值,停止运行函数。下次调用,从yield的下一行接着执行。

def foo():
    print("starting...")
    while True:
        print('start')
        res = yield 4
        print("res:",res)
g = foo()
print('first step')
print(next(g))
print("*"*20)

output:
first step
starting...
start
4
********************

print(next(g))
res: None
start
4

print(g.send(7))
res: 7
start
4

from inspect import isgeneratorfunction 
print(isgeneratorfunction(foo()))
print(isgeneratorfunction(foo))

False
True

要注意区分 foo 和 foo(),foo 是一个 generator function,而 foo() 是调用 foo 返回的一个 generator

参考:
[1] https://www.runoob.com/w3cnote/python-yield-used-analysis.html
[2] https://blog.csdn.net/mieleizhi0522/article/details/82142856#:~:text=yield是一个常用于,,迭代器,生成器。

posted @ 2022-11-23 12:49  xiaoxuxli  阅读(146)  评论(0编辑  收藏  举报