yiled
声明
??关于yield得解释,许多博主可能都没说明白,我在这里结合其它博主得解释,来说一下自己得了解。python—yield ??
普通print函数
??举个最普通函数得例子
def norm_print():
print("我好帅!")
norm_print()
??当我们直接调用norm_print()函数时,程序直接打印“我好帅!”,这点是不会有任何歧义得。而当我们用了含有yield得函数时,情况便会不同。首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。
yield函数
def yield_print():
print("我好帅!")
while True:
res = yield 666
print("res:",res)
temp_yield=yield_print()
next(temp_yield)
print(next(temp_yield))
print(next(temp_yield))
print("----------------------------")
print(temp_yield.send("sixsixsix"))
?? temp_yield=yield_print() 如果我们直接运行yield_print(),函数并不会真正执行,这是因为函数含有yield关键字,只有调用next方法,函数才会真正执行。 ?? next(yield_print()) 这样函数就会打印以下句式:
我好帅!
?? print(next(temp_yield)) 执行这句话之后,yield相当于return,然后就返回666(然后停止),注意,这里并没有给res赋值
我好帅!
666
?? print(next(temp_yield)) 当我们运行第二次next方法时,函数从上一次停止的地方继续运行,因此,先打印出“res:None”,因为并没有给res赋值,然后进入下一个while,直到执行到yield;
我好帅!
666
res: None
666
??那什么时候才给res赋值呢,这要用到send函数。这个时候,send将传入的赋值给res,然后执行next函数(send含有next函数),再次执行while循环,直到下次遇到yield暂停。
我好帅!
res: None
666
res: None
666
----------------------------
res: sixsixsix
666
总结
?? 简单的来说,yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
|