Python3エンジニア認定基礎試験 用語解説
ジェネレータとは
イテレータを作るための簡潔なツール。通常の関数のように書き、データを返すときに yield 文を使う。next() が呼ばれるたびに中断した処理を再開し、ローカル変数と最後に実行した文を記憶する。__iter__() と __next__() は自動で作られ、終了時に StopIteration が自動で送出される。角括弧ではなく丸括弧で囲むジェネレータ式もある。
この記事の目次
まず押さえる結論
ジェネレータは、Python3エンジニア認定基礎試験の「第9章 クラス」に出てくる用語です。定義だけでなく、どの場面で使う言葉か、何と混同しやすいか、問題文のどの表現で判断するかまで確認します。
情報源と編集区分
公式範囲を確認し、具体例・誤答例・判断手順は当サイトが編集。 一次情報確認日: 2026-09-18。
試験概要(公式)比較記事でさらに確認する
試験での問われ方
定義の言い換え
用語そのものではなく、説明文の一部を言い換えて出されることがあります。
似た概念との比較
同じ章の用語と入れ替えた選択肢に注意します。対象、目的、使う場面を分けます。
具体例からの判断
問題文の事例が、定義のどの部分に対応しているかを先に確認します。
誤答しやすいポイント
「第9章 クラス」の問題で、取り違えやすい組み合わせです。
- メソッドの最初の引数 self の扱い。公式チュートリアル9.4は「この名前付けは単なる慣習でしかありません。self という名前は、Python では何ら特殊な意味を持ちません」と述べており、予約語ではない。ただし慣習に従わないと読みにくくなるとも述べている。
- クラス変数とインスタンス変数の混同。どちらに属する値かで、他のインスタンスへの影響が変わる。
- 最初の引数を省略できると思い込むこと。インスタンスのメソッドは最初の引数でインスタンス自身を受け取るため省略できない。
関連する確認問題
第9章 クラス / イテレータとジェネレータ
yield文を含むジェネレータに対してnext()を繰り返し呼んだときの動作として、正しいものはどれか。
正解は「以前に中断した処理を再開し、ローカル変数と実行状態を呼び出しの間で保持する」である。公式チュートリアルは、ジェネレータを通常の関数のように書き、データを返すときにyield文を使うと説明している。next()が呼び出されるたびに、ジェネレータは以前に中断した処理を再開し、すべてのデータ値と最後に実行した文を記憶する。このため、毎回関数の先頭へ戻ってローカル変数を初期化するわけではなく、最初から全結果をリストにまとめて返す動作でもない。また、ジェネレータでは__iter__()と__next__()が自動で作成されるため、利用者がこの2つを手作業で追加する必要はない。処理が終了するとStopIterationも自動的に送出される。
第9章 クラス / イテレータとジェネレータ
for文がコンテナオブジェクトの要素を順に処理する仕組みと、ループの終了について、正しい説明はどれか。
正解は「コンテナに対してiter()を呼び、返されたイテレータの__next__()で要素を1つずつ取り出し、要素が尽きるとStopIteration例外でループが終了する」である。公式チュートリアル9.8は、for文は裏でコンテナオブジェクトに対してiter()関数を呼び、その関数は要素に1つずつアクセスする__next__()メソッドが定義されたイテレータオブジェクトを返すと説明している。これ以上要素がない場合、__next__()メソッドはStopIteration例外を送出し、その通知を受けてforループは終了する。
第9章 クラス / イテレータとジェネレータ
ジェネレータが、クラスを使ったイテレータより簡潔に書ける理由として、公式チュートリアルの説明に合うものはどれか。
正解は「__iter__()と__next__()が自動で作成され、ローカル変数と実行状態が自動で保存され、終了時にStopIterationが自動で送出されるから」である。公式チュートリアル9.9は、ジェネレータの定義がコンパクトになるのは__iter__()メソッドと__next__()メソッドが自動で作成されるからであり、呼び出しごとにローカル変数と実行状態が自動的に保存され、終了時には自動的にStopIterationが送出されると説明している。これらの機能により、通常の関数を書くのと同じ労力でイテレータを生成できる。
同じ章で確認したい用語
到達チェック
- ジェネレータを一文で説明できる
- 同じ章の似た用語と違いを説明できる
- 問題文の具体例から、ジェネレータに関係する論点を拾える
- 関連問題を解き、誤答した選択肢の理由を確認できる
執筆: ミナト編集部(運営者情報を見る)