1. 程式人生 > >可叠代對象、叠代器與生成器

可叠代對象、叠代器與生成器

list 返回 tuple 叠代器 不依賴 ret 本質 方式 while

叠代器

什麽是叠代器
叠代指的是一個重復的過程,且不是單純的重復,每次重復都基於上次的結果。
叠代器指的是叠代取值的工具,該工具的特點是可以不依賴於索引取值。
為什麽用叠代器
為了找出一種通用的&可以不依賴於索引的叠代取值方式。
如何用叠代器
可叠代的對象:但凡內置有__iter__方法得當對象都稱之為可叠代的對象
叠代器對象:既內置有__iter__,又內置__next__方法
關於__iter__方法:

  1. 調用可叠代對象的__iter__會得到一個叠代器對象
  2. 調用叠代器對象的__iter__會得到叠代器本身

叠代器的優缺點
有點

  1. 提供了一種通用的&可以不依賴於索引的叠代取值方式
  2. 同一時刻在內存中只有一個值,更加節省內存
    缺點
  3. 取指定值時不如索引靈活,並且叠代器是一次性的,只能往前取值
  4. 無法預知叠代器數據的個數

可叠代的對象
str、list、tuple、dict、set、文件對象
叠代器對象
文件對象是python定義好的叠代器對象

可叠代對象如何轉化為叠代器對象

調用可叠代對象內置的__iter__方法會得到一個返回值,該返回值就是對應的叠代器對象

for循環

for循環準確的說應該是叠代器循環,原理如下:

  1. 先調用in後面可叠代對象的__iter__方法,得到叠代器對象
  2. 執行叠代器的__next__方法得到一個返回值,賦值給每次循環的變量,運行循環體代碼
  3. 循環往復,直到叠代器取值完畢拋出異常然後捕捉異常結束循環

    自定義叠代器

    定義一個叠代器必須要有yield關鍵字
    在函數內但凡包含有yield關鍵字,運行到yield時,會暫停運行並會得到一個返回值,該返回值成為生成器對象,生成器本質就是叠代器
    yield
  4. 提供一種自定義叠代器的解決方案
  5. 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))

可叠代對象、叠代器與生成器