イテレーターについて
今回はイテレーターについて取り扱っていきたいと思います。今までの記事ではたまに出てきたイテラブルなオブジェクトやイテレーションなどの用語が出てきましたよね。今回の記事では、この定義や概念について自分なりに説明していきたいと思います。
イテレーターとは、一言でいうとイテレーション可能なオブジェクトであり、イテレーションとは要素を一つずつ取り出すことができるオブジェクトです。
しかし、ここで注意してほしいのはイテラブルなオブジェクトとイテレーターは同一ではないということです。例えば、リストなどはイテラブルなオブジェクトではあるけれどイテレーターではなく、range関数で得られるのはイテレーターです。ちょっとややこしくなってきましたね。
for文はイテレーターを回すことができます。そして、リストやタプルなどもfor文で回すことができます。しかし、リストやタプルはあくまでイテラブルなオブジェクトであるけれどイテレーターではありません。しかし、for文を用いることができる以上イテレーターでなければいけません。つまり、リストやタプルなどはイテレーターを生成可能なオブジェクトであり、for文を実行するときにはイテレーターに変換されているのです。そのようなオブジェクトをイテラブルなオブジェクトと呼んでいます。なんとなく理解できたでしょうか?
リストなどのイテラブルなオブジェクトからイテレーターを取り出すにはiter()関数を使います。そして、イテレーターから値を一つずつ取り出すにはnext()関数を使います。実際に具体例を見ていきましょう。
nums = [1, 2, 3]
i = iter(nums)
print(next(i))
print(next(i))
print(next(i))
実行結果
1
2
3
iter関数の戻り値はイテレーターであるため、iはイテレーターになります。そして、イテレーターから値を一つずつイテレーションするためにnextが用いられています。
なんとなくイテレーターが理解できたでしょうか?
ここまでで今回の記事は終わりです。次は、自作のイテレーターを作成することができるジェネレーターについて取り扱います。