[Python] iterators, generators and `yield`
Contents
iterators
- 當你建立了一個 list,你可以一個個去讀取它的內容,這就叫做一個 iterator,如下面這個片段,
mylist
是一個 iterator
|
|
執行結果:
1 2 3
- 所有可以讓你用
for...in...
去一個個讀取內容的東西都可以叫做 iterable, 包括 lists, strings, files - 這些 iterables 可以隨意讀取、容易使用,但是他們會被存在 memory 裡,如果值太多就會佔太多 memory
generator
- generator 也是 iterator 的一種,但只能 iterate 它們一次,因為 generator 並沒有把所有的值存在 memory 裡,它們只在需要的時候才生成
|
|
執行結果:
0 1 4
- generator 用
()
產生,iterator 用[]
產生 - 但我們不能二次使用
for i in mygenerator
因為它們算了 0 之後直接丟掉,再去算 1,最後算 4
yield
yield
就像 return
的用法,只是它回傳一個 generator
|
|
|
|
執行結果:
0 1 4
- 當的函數要回傳一個非常大的集合,且你希望只讀一次的話,那
yield
就非常的方便了
To master
yield
, you must understand that when you call the function, the code you have written in the function body does not run. The function only returns the generator object, this is a bit tricky :-)
|
|