1. 程式人生 > >python中關於迭代器和生成器的名詞解釋(python3)

python中關於迭代器和生成器的名詞解釋(python3)

  1. 迭代器協議:對有__next__方法的物件(迭代器物件)自動呼叫__next__方法,直到結尾引發stopIteration.
  2. 迭代工具:迭代工具按迭代協議處理迭代器
    1. 常見的工具有 for, list(), tuple(), str.join(), in map, sorted, zip, enumerate, filter, sum, any
  3. iterable可迭代物件:實現了__iter__方法的物件叫做可迭代物件
  4. iterator迭代器:實現了__next__方法的物件叫迭代器,迭代器需要同時實現__iter__和__next__方法
  5. for--in 語句的執行邏輯:
    1. 首先判斷物件是否有__iter__方法,如果有,先it = iter (instance),獲取迭代器it,然後next(it)
    2. 否則,判斷是否有__getitem__方法,有就按下標迭代
    3. 如果__iter__和__getitem__方法都沒有,那麼久報錯
    4. 特殊情況是:str型別沒有__iter__方法,但照樣可以for-in,這是因為它有__getitem__方法
  6. 可迭代物件iterable根據有沒有__next__方法分為兩種:
    1. 有__next__方法:
      1. 其本身就是iterator迭代器。手動迭代時可以去掉it = iter(instance),直接next(iterable),比如檔案物件。
    2. 無__next__方法:
      1. 手動迭代時必須執行it = iter(instance) 和 next(it),比如列表,range()。
  7. 可迭代物件iterable根據__iter__返回是否是自身分為兩種:
    1. __iter__返回self自身:
      1. 那麼it1 = iter(f), it2 = iter(f)是同一個物件,也就是說只支援一個迭代器,那麼這時它必然有__next__方法
    2. __iter__不返回自身:
      1. 返回新的物件,那麼it1 = iter(f), it2 = iter(f)是兩個物件,也就是支援多個迭代器,此時要求返回要實現__iter__方法