Pythonのfor文は、様々なオブジェクトを回すことができます。その中でも、「イテラブルなオブジェクト」がfor文で回せる主なオブジェクトです。

イテラブルなオブジェクトとは

イテラブルなオブジェクトとは、次のいずれかに該当するオブジェクトです。

  1. __iter__ メソッドを定義したオブジェクト
  2. __getitem__ メソッドをシーケンスとして定義したオブジェクト

__iter__ メソッドを定義したオブジェクト

このようなfor文を書いたとき:

iterable_object = [0, 1, 2]
for elem in iterable_object:
    print(elem)

内部ではこのように動いています:

iterable_object = [0, 1, 2]
iterator = iterable_object.__iter__()  # __iter__メソッドを呼び出し、イテレータを生成
while True:
    try:
        elem = iterator.__next__()  # __next__メソッドを呼び出し、イテレータから要素を取り出す。 要素がない場合はStopIteration例外を投げる。
    except StopIteration:
        break
    print(elem)

__getitem__ メソッドをシーケンスとして定義したオブジェクト

__getitem__メソッドは、Pythonの特殊メソッドの一つで、オブジェクトに角括弧 [ ]でアクセスしたときの挙動を定義できます。

class MyIterableObject:
    def __init__(self):
        self._elements = ['あいうえお', 'かきくけこ', 'さしすせそ']
    def __getitem__(self, index):
        if 0 <= index < 3:
            return self._elements[index]
        else:
            raise IndexError
iterable_object = MyIterableObject()
for elem in iterable_object:
    print(elem)

まとめ

Pythonのfor文は、イテラブルなオブジェクトを回すことができます。イテラブルなオブジェクトとは、__iter__ メソッドを定義したオブジェクトや __getitem__ メソッドをシーケンスとして定義したオブジェクトを指します。これらの理解は、Pythonのfor文をより深く理解するために重要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です