和 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 還有一些其他功能,可以參考這一篇。
沒有留言:
張貼留言