yield與return的功能都是返回程序執(zhí)行結(jié)果,但是yield返回執(zhí)行結(jié)果并不中斷程序執(zhí)行,return在返回執(zhí)行結(jié)果的同時(shí)中斷程序執(zhí)行。
例如我們經(jīng)常使用for循環(huán)來遍歷:
def? func():
? ? ?test_list? =? []
? ? ?for? i? in? range(10):
? ? ? ? ? ? test_list.append( i )
? ? ? return? i
fun = func()
print(fun)? ? ? ? #? ?[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
def func():
? ? for i in range(10):
? ? ? ? ?yield i
fun = func()
print(fun)? ? ? ? ? ? ? ?#? <generator? object? func? at? 0x7f4cb265bb48>
print(next(a))? ? ? ? ?#? 0
print(next(a))? ? ? ? ?#? 1
print(next(a))? ? ? ? ?#? 2
可以看出,yield 輸出的是一個(gè)對象,相當(dāng)于是一個(gè)容器,想取什么數(shù)據(jù)就取出什么,而return 只會(huì)返回一個(gè)值,且return后面的代碼不會(huì)執(zhí)行。