2020/5/4

yield in python

Python 的另一個 function return(?) 指令 : yield

和 return 不一樣的是..
return 後,function 就退出了。
yield 的話,function 暫停 (或是說suspend了),把 yield 值交給 caller。
然後用 next( ) 時,這格 function 會從 上次 暫停 (也就是 yield) 的地方繼續下去...

>>>def new_range(n):
...   print('start')
...   i = 0
...   while i < n:
...      print('a')
...      yield i
...      i += 1
...
...c = new_range(10)
...print(next(c))
start
a
0
...print(next(c))
a
1
可以對照一下function 內的 print('start') 和 print('a') 出現的位置。

實際上,yield 可以用來產生一個 range list 的 iterator,直接拿來用,而不用真的把整個 list 先做出來

用 yield 的 function 還有一些其他功能,可以參考這一篇

沒有留言:

張貼留言