大家讲道理2017-04-17 17:02:37
迭代器
と 生成器
は概念的には重複がなく、類似性はありません。
簡単に概要を説明しましょう:
イテレータは実際には、リストやタプルなどの 迭代
に使用できる 容器
です。
ジェネレーター。ここでの 生成
は、迭代器
を生成できるという事実を指します。
デモは次のとおりです:
リーリーここの foods
はイテレータです。
これは 生成器
です。生成器
のフォーカスは yield
であることに注意してください。ここでの block
は、一時的に の 1 つの要素と同等であると理解できます。 迭代器
。たとえば、foods
の banana
要素、およびジェネレーターのメイン関数は 把大内存占用数据分次写入内存
です。この利点は、すべてのデータを一度にプログラムに読み込む必要がないことです。この場合、メモリ リークを防ぐことで、プログラム ユーザーのエクスペリエンスが向上し、コードがよりエレガントになります。
使用シナリオについては、実際に上で説明しました。詳しく知りたい場合は、私と同じようにしてください:)
阿神2017-04-17 17:02:37
Python では、for ステートメントにイテレータを配置し、オブジェクトにイテレータ機能を追加して、上記の要件を満たすことができます。これは私の例です。通常、大きなファイルを開くにはメモリ マップされたファイルを使用する必要があります。ただし、標準の mmap オブジェクトは反復をサポートしていないため、次のコードは実行できません:
リーリーそのような効果を実現したい場合は、イテレータを使用する必要があります。以下の iter 関数と next 関数を参照してください。
リーリージェネレーターのアプリケーション シナリオは、主に 遅延評価 とデータ生成です。 特定のロジックでは、0 ~ 300 万の乱数が必要であるとします。
の 2 つのオプションがあります。一度に 300 万個の乱数を生成し、リストまたはどこかに配置します。
必要なときに を一時的に生成 (ジェネレーターを使用)
上記のコードでは、ファイル内の行数に応じて一時的に生成される乱数の数