5

何を繰り返しているかに応じて、複数の反復子クラスがあります。

>>> import re
>>> re.finditer("\d+", "1 ha 2 bah").__class__
<type 'callable-iterator'>
>>> iter([1, 2]).__class__
<type 'listiterator'>
>>> iter("hurm").__class__
<type 'iterator'>

2 つの質問:

  1. それらの間に意味のある違いはありますか?
  2. 最初のものはなぜ a と呼ばれるのcallable-iteratorですか? 絶対に呼べません。
4

2 に答える 2

2

イテレーターになるということは、イテレーター プロトコルを実装することを意味し、特定のクラスのメンバーになることではありません。イテレーターはイテレーターと同じです。イテレータである独自のカスタム クラスを作成できます。それらは、リストしたクラスのいずれにもなりません。

「イテレータである」という観点からは、両者に違いはありません。それらはすべて反復子であり、それは単にそれらを反復できることを意味します。もちろん、それらの間には他の違いがあるかもしれません - それらには追加のメソッドや動作が定義されているかもしれません - しかし、イテレータはイテレータと同等であるため、それらは同じです。

イテレータは、特定のデータ構造を反復処理する「方法を知っている」ある種の仕掛けと見なすことができます。さまざまな種類のデータ構造には、それらを反復処理するための独自のカスタム クラスがある場合があります。これらの反復子は内部で異なることを行う場合がありますが、すべて同じパブリック インターフェイス (反復子プロトコル) を共有します。

于 2013-10-10T04:34:52.277 に答える