ジェネレータ式とは、ジェネレータを作るための式。リスト内包記法の両端の括弧を[]から()に置き換えると、ジェネレータ式になる。ジェネレータ式で生成したジェネレータはリストと違い1度しか使用できない。(破壊的な動作をする)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> gen = (x**2 for x in range(10)) >>> for i in gen: #リストと同様にループ対象として指定できる。 ... i ... 0 1 4 9 16 25 36 49 64 81 >>> for i in gen: #1度使い終わったジェネレータは、再利用できない。 ... i ... |
ジェネレータの利点と欠点
利点
- メモリ使用量が少ない
必要に応じて要素を1つずつ生成するのでメモリを節約できる。 - 動作が高速
必要に応じて要素を1つずつ生成するので、ジェネレータの生成は、リスト生成と比べて高速である。
欠点
- 一度しか使えない
値は1回しか取り出せない。 - ランダムアクセスできない
先頭要素からの順にしか値を取り出せない。