ジェネレータ式 (generator expression) とは、丸括弧を使ったコンパクトな ジェネレータ表記法です:
generator_expression | ::= | "(" test genexpr_for ")" |
genexpr_for | ::= | "for" expression_list "in" test [genexpr_iter] |
genexpr_iter | ::= | genexpr_for | genexpr_if |
genexpr_if | ::= | "if" test [genexpr_iter] |
ジェネレータ式は新たなジェネレータオブジェクトを生み出します。 ジェネレータ式は単一の式の後ろに少なくとも一つの for 節と、場合によりさらに複数のfor または if 節を 続けたものです。 新たなジェネレータが繰り返す値は、各for および if 節をブロックとして、左から右へとネストし、 その最内ブロックの中で式を評価した結果を出力しているものと みなせます。
ジェネレータ式の使う変数の評価は、ジェネレータオブジェクトに対して next() メソッドを呼び出すまで遅延されます。とはいえ、 もっとも左に位置する for 節はただちに評価されるため、 ジェネレータ式の最左 for 節のエラーは、ジェネレータ式を 使っているコードの他のエラーに先立って起きることがあります。 それ以後の for 節は、先行する for ループに 依存しているため、直ちには評価されません。
例: "(x*y for x in range(10) for y in bar(x))"
関数の唯一の引数として渡す場合には、丸括弧を省略できます。 詳しくは5.3.4 節を参照してください。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。