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