ジェネレーターの話をしよう｡
非常に重要なキーワードであり､ かなり高度なテーマである｡
どんなものですか？
Pythonにはジェネレータが用意されており､ これを使うと時間の経過とともに一連の値を生成することができます｡
うーん｡
どういう意味ですか？
探ってみよう｡
実は以前､ 発電機を習ったことがあるんですよ｡
レンジを覚えていますか？
まあ､ レンジは発電機なんですけどね｡
しかし､ それは何なのか？
ジェネレータとは､ Pythonではyieldという特殊なキーワードを使うことができ､ 関数を一時停止したり再開したりすることができるものです｡
そこで､ ちょっといい例で実証してみましょう｡
レンジのようなものを使うと､ わかりますよね｡
Verseには､ リストのようなことが書かれています｡
レンジをリストに変換するとしよう｡
そうそう｡
一覧です｡
これは､ 例えば､ 100の項目からなる巨大なリストを､ コンピュータのメモリ対範囲に作成するものです｡
ひとつひとつ創り上げていく｡
お見せしましょう｡
関数を作って､ 仮にmake listと呼ぶとします｡
そして､ このメイキングリストが受け入れてくれるのです｡
数字です｡
そして､ このmake listは､ まあ､ resultが空の配列に等しいとします｡ そして､ anの範囲内のIに対して言うつもりです｡
結果ドットアペンドを追加して､ 面白半分に掛け算してみよう｡
回する｡
そして､ 最後に結果を返します｡
今やったようなリストを作るとき､ 本質的にはこうしているのです｡
レンジを使ってリストを作成し､ メモリに常駐する結果を返しています｡
では､ ここでmake listで､ 自分のリストがmake list 100と同じになるとします｡
印刷するとき
マイリスト
そして､ 「実行」をクリックします｡
ああ｡
そして､ 私のことを確かめてください｡
ここにあるパラメータが正しい名前です｡
そして､ appendのスペルを確認する｡
リストを手に入れる｡
でも､ こっちのリストは､ 私たちの記憶の中に残っています｡
私のリストは､ メモリ内のある場所を指しています｡
だから､ これは今､ スペースを取っているんです｡
さて､ レンジは発電機です｡
また､ ジェネレータは､ このforループを実行するときにメモリに保持されないので､ 少し異なります｡
この範囲は､ 例えば0から99までの巨大なリストを勝手に作ってくれるわけではありません｡
そして､ 反復を開始する｡
いや､ forループの場合は､ 「範囲として､ まず0番を与え､
次に1番､ 2番､ 3番､ 4番と100番まで与えよう｡
そのため､ メモリーには､ 私のリストのように､ このリストが作成されることは決してありません｡
そして､ これはかなり慌ただしくなりますよね？
例えば､ 巨大なリストを作りたいとします｡
では､ 「でリストを作りたい」とします｡
まあね｡
この配列全体が
欲を言えば､ ここに印刷をしましょうか｡
この巨大なリストで､ 私は実行をクリックします｡
まいったなぁ｡
見たか？
その分､ メモリを使い切っているんです｡
そして､ 出来上がった後は
それが､ まだないんです｡
そうして初めてこのリストが使えるようになり､ メモリ上のそのリストにアクセスすることになるのです｡
そして､ より効率的な方法として､ ジェネレーターを使い､ メモリにスペースを取らずに一度に1つずつ生成することができます｡
さて､ ジェネレータでどのようにそれを行うか､ また実際にどのように使用するかを学ぶために､ 次のレッスンに進み､ いくつかの古い知識を再確認する必要があります｡
このまま完結させる｡
とりあえず､ 次の動画でお会いしましょう｡
バイバイ｡