検索

ホームページ  >  に質問  >  本文

语法 - python的生成器和迭代器问题

ringa_leeringa_lee2823日前667

全員に返信(2)返信します

  • 大家讲道理

    大家讲道理2017-04-17 17:02:37

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

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

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

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

    デモは次のとおりです:

    リーリー

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

    リーリー

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

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

    返事
    0
  • 阿神

    阿神2017-04-17 17:02:37

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

    リーリー

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

    リーリー

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

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

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

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

    リーリー

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

    返事
    0
  • キャンセル返事