【Python入門】イテレータとジェネレータをJava経験者向けにやさしく解説!

こんにちは。ゆうせいです。
今回は、Javaを学んだ新人エンジニアさんに向けて、Pythonの重要な機能である「イテレータ」と「ジェネレータ」について、基礎から丁寧に解説します。
「for文で配列回すだけでよくない?」と思ったあなた。実は、イテレータとジェネレータを使いこなせるようになると、メモリ効率のよいコードや柔軟なループ処理が書けるようになります!
Javaの「Iterator
インターフェース」や「Iterable
」と比較しながら、わかりやすく解説していきますね。
イテレータ(Iterator)とは?
Pythonにおけるイテレータの定義
Pythonでのイテレータは、繰り返し処理を行うための仕組みです。内部的には「次の値」を順番に返す「__next__()
メソッド」を持ったオブジェクトのことを指します。
Javaでいうところのこの部分に近いです:
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
これに相当するPythonのコードはこうなります:
nums = [1, 2, 3]
it = iter(nums) # イテレータを作成
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 3
ポイントは2つのメソッド
__iter__()
:イテラブル(繰り返し可能)なオブジェクトが呼び出す__next__()
:次の値を返す(値が無ければStopIteration
を発生)
ジェネレータ(Generator)とは?
「イテレータを簡単に作る方法」と考えよう!
Pythonのジェネレータとは、イテレータを自動で作ってくれる関数のようなものです。
イテレータを一から作るとクラス定義や状態管理が必要ですが、ジェネレータは yield
文 を使うだけで、その処理を一時停止しながら値を順番に返すことができます。
Javaに例えるなら、Javaには直接的なyield
は無いですが、状態を保持しながら都度値を返すコルーチンのようなイメージです。
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
この関数を呼び出すと、イテレータが返ってきます:
counter = count_up_to(3)
print(next(counter)) # 1
print(next(counter)) # 2
print(next(counter)) # 3
「return」ではなく「yield」が肝!
return
は一回で関数を終了するyield
は一時停止して次の値へ進める
イテレータ vs ジェネレータ 比較表
機能 | イテレータ | ジェネレータ |
---|---|---|
書き方 | クラス定義で __iter__ / __next__ | def 関数+yield |
状態管理 | 手動(変数を保持する必要あり) | 自動(Pythonが内部で保持) |
簡単さ | やや複雑 | とても簡単 |
使い所 | 複雑な繰り返しロジック | シンプルにしたいとき |
実践:リストの要素を2倍にして出力するジェネレータ
def double_values(lst):
for value in lst:
yield value * 2
nums = [1, 2, 3, 4]
for item in double_values(nums):
print(item)
このように、yield
を使うだけで「メモリを圧迫せずに処理を1つずつ行うこと」ができます。
メリット・デメリット
イテレータのメリット・デメリット
メリット
- 柔軟にカスタマイズできる
- 自分で状態をコントロールしやすい
デメリット
- 実装がやや面倒(初心者にはとっつきにくい)
ジェネレータのメリット・デメリット
メリット
- 書くのがとにかく楽
- メモリ効率が良い(大量データに最適)
デメリット
- 状態を細かく制御するのには不向きなこともある
最後に:これからどう学べばいい?
イテレータとジェネレータは、Pythonの「Pythonic(パイソニック)な書き方」をするうえで欠かせません。Javaと違って、for文の裏でどう動いているかを知ると、コードがもっと読みやすく・書きやすくなります。
次のステップとしては、以下をおすすめします!
map()
、filter()
、zip()
といった「イテレータ系組み込み関数」の習得- ジェネレータ内で
yield from
を使った入れ子構造 - 非同期ジェネレータ(
async def
+yield
)の活用(上級)
「Pythonは簡単」ってよく聞くけど、こういう仕組みを知ってはじめて“本当のやさしさ”が見えてきます。
一歩ずつ、一緒に学んでいきましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年6月22日【MySQL入門】新人エンジニアのための記号の読み方と使い方まとめ
山崎講師2025年6月22日【MySQL入門】新人エンジニアのための3層スキーマの理解
山崎講師2025年6月22日【HTML & CSS入門】新人エンジニアのための記号の読み方と使い方まとめ
山崎講師2025年6月22日【Java入門】新人エンジニアのための記号の読み方と使い方まとめ