Pythonのfor文は、様々なオブジェクトを回すことができます。その中でも、「イテラブルなオブジェクト」がfor文で回せる主なオブジェクトです。
イテラブルなオブジェクトとは
イテラブルなオブジェクトとは、次のいずれかに該当するオブジェクトです。
__iter__
メソッドを定義したオブジェクト__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文をより深く理解するために重要です。