首先,把yield理解成return,可以用作返回数据,如下:
def f():
yield 9
next(f())
#结果为 9
如果你用一个变量接受该值,首次执行时并不会执行函数,而是先得到一个生成器,如下:
def f():
print("提示字符!")
yield 9
g=f()
print(g)
#结果为:
可以看出,调用了f()函数,但并没有输出“提示字符!”汉字,说明未执行函数体,g的打印结果为一个生成器。
那什么时候才会执行函数体呢?当需要用到返回的数值时执行,如下:
def f():
print("提示字符!")
yield 9
g=f()
print(g)
print("--------")
print(next(g))
#结果为:
--------
提示字符!
9
通过next()函数获取返回值,则开始执行函数体。
yield与return还有一点不同的是,return返回数据后直接退出函数,不再执行,但yield返回数据后函数只是“暂停”状态,之后仍然可以通过next()函数接着之前的状态继续运行,如下:
def f():
while(True):
print("提示字符!")
yield 9
print("程序接着之前状态运行!")
g=f()
print(next(g))
print("-----分隔符-----")
print(next(g))
#结果为:
提示字符!
9
-----分隔符-----
程序接着之前状态运行!
提示字符!
9
可以看出,yield返回后函数并未退出,下一次调用时接着在运行。