お帰りなさい｡
ボンネットの中の仕組みを理解してほしい｡
そこで､ 独自のforループを実装する例と､ 独自のレンジ関数を実装する例の2つを紹介します｡
まず､ 最初のものはforループです｡
だから､ スペシャル・フォー・ループと言うんだ｡
裏側でやっていることは､ イテラブルを受け取ることだけです｡
そして､ イテレータと言うことになります｡
イテラブルにするために､ イテラブルに等しくする必要があります｡
私たちは､ インナーファンクションと呼んでいるものがあります｡
これは､ 先ほど渡したイテラブルを受け取ります｡
さて､ この介入によって､ このイテラブルに対して次の関数を使うことができるようになります｡
だから､ 一緒にいてください｡
真実のうちにと言うことです｡
試してみたい｡
そして､ このトライブ・ブロックではイテレータと呼ぶことにします｡
そして､ 必要であれば､ ここで何らかの操作を行うことができます｡
あるいは､ 次のイテレータを呼び出せばよいのです｡
あのさぁ...｡
ここで､ イテレータが何であるかを確認するために､ 何かをプリントしてみましょう｡
そして最後に､ stop iteration exceptionが発生したときに停止するようにしたいのです｡
Iterableにもうアイテムがない､ というのを見たのを覚えていますか？
そして､ ここでは単純にただ壊れるだけです｡
行って確認してください｡
Colinは正しく設定されているのですが｡
そこで､ 特別なforループを作り､ 1､ 2､ 3のリストを与えて､ Runをクリックすると､ 次のようになります｡
チェックしてみてください｡
反復可能なオブジェクトをnextでループしています｡
そして､ このオブジェクトは､ 1から3まで絶えずループしているにもかかわらず､ 同じメモリ空間に存在していることがわかります｡
このように､ 4つのループは､ 例えばNUMのために行い､ それにリストを与えるとき､ フードの下でどのように機能するかということです｡
すべてを貫き通す｡
これは反復可能なオブジェクトに変換され､ 行の最後を終えてループを抜けるまで､
何度も何度も次の反復可能なオブジェクトを呼び出します｡
また､ イテレータの実際の値はどのように確認するのでしょうか｡
さて､ next関数は､ 次の項目が何であれ､ 出力することを忘れないでください｡
だから､ ここで印刷をしたら｡
そして､ 「実行」をクリックします｡
得ることができます｡
1､ 2､ 3
だから､ 「実行」をクリックしようと思えば､ 2倍をすればいいわけです｡
そして､ そこにあるのは
ループの特集で､ リストが2倍になりました｡
それだけです｡
それが､ forループの本当の仕組みです｡
しかし､ レンジはどうでしょうか？
独自のレンジ関数を作ることはできないか？
絶対にできます｡
そして､ これが楽しいんです｡
結局はオブジェクトを作るだけなので､ クラスとこのクラスを作りましょう｡
それは､ 私たちができるアクションがあるからです｡
だから､ 私のジェネレーターはマイジェネレーターと言い､ これは私たちのレンジが行うことを真似ることになります｡
そこで､ クラスを用意し､ このクラスにinit関数を持たせることにします｡
自分､ 最初と最後を用意する｡
つまり､ この範囲から始まって､ この範囲で終わるということができるわけです｡
そしてここでは､ まず典型的なセルフドットを行います｡
ファーストに等しい｡
そして､ セルフドットラストはラストに等しい｡
ここでクラスを使っているのは､ Pythonで独自のデータ型､ 独自の特別な範囲を作成していることを忘れないようにするためです｡
これでサンプルのジェネレータができました｡ 理想的には､ gen equals と言って､ 0から100までの範囲を持つジェネレータをインスタンス化できるようにしたいものです｡
そして､ 理想的にはAIやGENにも言えることです｡
プリントも｡
というのも､ レンジを使えるようになったのは､ そういうことですよね｡
では､ どうすればうまくいくのか？
まあ､ ダンダーの手法を使えばいいんですけどね｡
そこで､ エターの持ち方を思い出してください｡
イテレータを取得し､ それに対してnextを使用するため｡
さて､ 私たちにはエミッターという定義ダンダーがあり､ エミッターによって創作することができます｡
霰（あられ）｡
ここではselfとし､ 実際のクラスをこのように返すことにします｡
そして最後に､ Jenの次の関数を実行できるようにしたい｡ 4つのループがどのように機能するかは見たとおりだ｡
イトール､ そして次のM&Mを使えるようにする必要があるのです｡
そこでもう一度､ 便利なダンダーメソッドを使ってみましょう｡
次のページ
そして､ これはPythonに組み込まれているのです｡
だから､ もし私がここで自己を行う｡
そして､ 私たちがここでやりたいことは､ 次にどう動いてほしいかを知らせることです｡
まあ､ もしというところでしょうか｡
そして､ 自分たちがどこにいるのかを把握するために､ 何らかの状態やデータが必要なのです｡
ジェネレーターの機能を思い出してください｡
どこにいるのか覚えておく｡
さて､ クラスオブジェクトの属性を作成することができます｡
だから､ 電流はゼロに等しいと言えるのです｡
これが現在のイテレーションで､ マイゲンドットカレントと言うところですね｡
それが自己のドットラストより少ない限り､ ここでは100となる｡
もし､ そうだとしたら
まあ､ 自分のジェンドット電流に等しい数値が欲しいんですけどね｡
ゲン・ドット・カレントを1つ増やしたいのは､ ちょっと､ 次の場所に移動して､ また戻ってくるということを言いたいからです｡
番号のことです｡
だって､ ネクストの下はそうなっているんでしょう？
現在地を1つインクリメントして､ 単純にその数値を返しています｡
そして､ これからも､ ずっと､ ずっと､ 続けていきたいと思っています｡
まあカレントが前より大きくなくなるまでは｡
その場合､ 反復するものがなくなったので､ 単純に反復の停止を発生させることになります｡
これがうまくいくかどうか見てみましょう｡
これを実行します｡
そして､ それがすべてうまくいっていることを見てください｡
ジェネレータをループさせて､ 0から99までのIをプリントすることができました｡
ここでもう一度､ 例に戻って考えてみましょう｡
そして､ これは最初はちょっと見づらいと思うんですけど｡
でも､ 私がやったのは､ IT機能にファーストとラストの選択肢を持たせたいと言っただけです｡
そして､ これから作成するこのオブジェクトを反復処理できるようにしたい｡
また､ 前回の例を思い出していただくと､ forループが必要とするnextも使えるようにしたいです｡
ということで､ Jenで4項目ということで｡
ループスルーするだけです｡
これはイテレータになったのでループさせることができ､ ループさせて常に1つずつ増やせるようにしたので､
その上で次の値を使うことができます｡
番号を返し続けるまで｡
私の電流が101になるまで数字を返し続け､ 100より小さくはない､ つまり自己減少です｡
だから､ ストップイテレーションが発生するんです｡
forループが自動的にキャッチしてくれるので､ エラーにならず､ ループが停止します｡
レンジの下は､ そういう仕組みになっているんです｡
さて､ これは知らなくてもいいことです｡
日々の生活の中で､ これを実行するよう求められることはないでしょう｡
でも､ こういうことなんだよ､ ということを伝えたかったんです｡
それが大事だと思うんです｡