语法 - python的生成器和迭代器问题
ringa_lee
ringa_lee 2017-04-17 17:00:37
0
2
656
ringa_lee
ringa_lee

ringa_lee

全員に返信(2)
大家讲道理

迭代器生成器 は概念的には重複がなく、類似性はありません。

簡単に概要を説明しましょう:

  • イテレータは実際には、リストやタプルなどの 迭代 に使用できる 容器 です。

  • ジェネレーター。ここでの 生成 は、迭代器 を生成できるという事実を指します。

デモは次のとおりです:

リーリー

ここの foods はイテレータです。

リーリー

これは 生成器 です。生成器 のフォーカスは yield であることに注意してください。ここでの block は、一時的に の 1 つの要素と同等であると理解できます。 迭代器。たとえば、foodsbanana 要素、およびジェネレーターのメイン関数は 把大内存占用数据分次写入内存 です。この利点は、すべてのデータを一度にプログラムに読み込む必要がないことです。この場合、メモリ リークを防ぐことで、プログラム ユーザーのエクスペリエンスが向上し、コードがよりエレガントになります。

使用シナリオについては、実際に上で説明しました。詳しく知りたい場合は、私と同じようにしてください:)

いいねを押す +0
阿神

Python では、for ステートメントにイテレータを配置し、オブジェクトにイテレータ機能を追加して、上記の要件を満たすことができます。これは私の例です。通常、大きなファイルを開くにはメモリ マップされたファイルを使用する必要があります。ただし、標準の mmap オブジェクトは反復をサポートしていないため、次のコードは実行できません:

リーリー

そのような効果を実現したい場合は、イテレータを使用する必要があります。以下の iter 関数と next 関数を参照してください。

リーリー

ジェネレーターに関しては、yield またはジェネレーター式を使用する必要があります。

ジェネレーターのアプリケーション シナリオは、主に 遅延評価 とデータ生成です。 特定のロジックでは、0 ~ 300 万の乱数が必要であるとします。

の 2 つのオプションがあります。
  1. 一度に 300 万個の乱数を生成し、リストまたはどこかに配置します。

  2. 必要なときに を一時的に生成 (ジェネレーターを使用)

リーリー

上記のコードでは、ファイル内の行数に応じて一時的に生成される乱数の数

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート