可叠代對象、叠代器與生成器
阿新 • • 發佈:2018-09-28
list 返回 tuple 叠代器 不依賴 ret 本質 方式 while
叠代器
什麽是叠代器
叠代指的是一個重復的過程,且不是單純的重復,每次重復都基於上次的結果。
叠代器指的是叠代取值的工具,該工具的特點是可以不依賴於索引取值。
為什麽用叠代器
為了找出一種通用的&可以不依賴於索引的叠代取值方式。
如何用叠代器
可叠代的對象:但凡內置有__iter__方法得當對象都稱之為可叠代的對象
叠代器對象:既內置有__iter__,又內置__next__方法
關於__iter__方法:
- 調用可叠代對象的__iter__會得到一個叠代器對象
- 調用叠代器對象的__iter__會得到叠代器本身
叠代器的優缺點
有點
- 提供了一種通用的&可以不依賴於索引的叠代取值方式
- 同一時刻在內存中只有一個值,更加節省內存
缺點 - 取指定值時不如索引靈活,並且叠代器是一次性的,只能往前取值
- 無法預知叠代器數據的個數
可叠代的對象
str、list、tuple、dict、set、文件對象
叠代器對象
文件對象是python定義好的叠代器對象
可叠代對象如何轉化為叠代器對象
調用可叠代對象內置的__iter__方法會得到一個返回值,該返回值就是對應的叠代器對象
for循環
for循環準確的說應該是叠代器循環,原理如下:
- 先調用in後面可叠代對象的__iter__方法,得到叠代器對象
- 執行叠代器的__next__方法得到一個返回值,賦值給每次循環的變量,運行循環體代碼
循環往復,直到叠代器取值完畢拋出異常然後捕捉異常結束循環
自定義叠代器
定義一個叠代器必須要有yield關鍵字
在函數內但凡包含有yield關鍵字,運行到yield時,會暫停運行並會得到一個返回值,該返回值成為生成器對象,生成器本質就是叠代器
yield- 提供一種自定義叠代器的解決方案
- yield可用於返回值
yield和return的異同
相同點:都可以用於返回值
不同點:yield可以暫停函數,yield可以返回多個值,而return只能返回一次值且會終止函數的運行。
一個自定義的生成器
def my_range(start,stop,step=1): while start<stop: yield start start+=step res=my_range(1,5,2) print(next(res)) print(next(res))
可叠代對象、叠代器與生成器