yield
yield把函数变为generator
gennerator需要收到一次send(None)或者next才开始执行函数
函数执行了yield语句后,会挂起,直到外部调用send传递一个对象作为yield语句返回值,则继续函数
generator中如果执行return语句也会向常规函数一样终止
yield会执行完下一条语句后,挂起这个方法,保存该语句结果
直到外部调用next或者send才继续方法的执行
比如下面例子
def Test3():
print("Test3 in")
for i in range(3):
s = yield print("do yield test3 %s" % i)
print("Test3 get %s" % s)
print("Test3 end")
print("start3")
t = Test3()
print("start3 send")
t.send(None)
print("start3 send end")
for i in range(2):
print("start3 range %s" % i)
t.send(i)
print("start3 range end")
"""
--------------------------OUTPUT---------------------
start3
start3 send
Test3 in
do yield test3 0
start3 send end
start3 range 0
Test3 get 0
do yield test3 1
start3 range 1
Test3 get 1
do yield test3 2
start3 range end
"