アイテムを気にせずにジェネレーター関数を実行する簡単な方法

リチャードノイマン

生成されたアイテムを気にせずにジェネレーター関数を実行する必要があるユースケースがいくつかあります。
他のユースケースでは確かに生成された値が必要なので、それらを非汎用関数にすることはできません。

私は現在、発電機を使い果たすために些細な自作関数を使用しています。

def exhaust(generator):
     for _ in generator:
         pass

私はそれを行うためのより簡単な方法があるかどうか疑問に思いましたが、私はそれを見逃していますか?

次のユースケースを編集します。

def create_tables(fail_silently=True):
    """Create the respective tables."""

    for model in MODELS:
        try:
            model.create_table(fail_silently=fail_silently)
        except Exception:
            yield (False, model)
        else:
            yield (True, model)

ある文脈では、私はエラーと成功の値を気にします…

for success, table in create_tables():
    if success:
        print('Creation of table {} succeeded.'.format(table))
    else:
        print('Creation of table {} failed.'.format(table), file=stderr)

…そして、関数を「盲目的に」実行したい場合もあります。

exhaust(create_tables())
モーゼスコレドエ

このためのforループの設定は、Pythonのforループが基本的に単純な代入ステートメントの連続実行であることを念頭に置いて、比較的コストがかかる可能性があります。n(ジェネレーター内のアイテム数)の割り当てを実行しますが、後で割り当てターゲットを破棄するだけです。

代わりに、ジェネレーターを長さゼロにフィードすることができdequeます。C速度で消費し、listイテレータ/ジェネレータを実体化する他の呼び出し可能オブジェクトのようにメモリを消費しません

from collections import deque

def exhaust(generator):
    deque(generator, maxlen=0)

consumeitertoolsレシピから取得。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ジェネレーター/イテレーターのアイテム数を数える最も簡単な方法は何ですか?

分類Dev

itertools.countと同等のイテレーターをジェネレーター関数を使用せずにPythonでどのように実装しますか?

分類Dev

条件の異なるデータフレームを分割せずに数式を実行する方法

分類Dev

Androidでは、カスタムウィジェットを作成せずに、実行時に単一のXMLレイアウトのTextViewにさまざまなテーマを適用できますか?

分類Dev

別のスレッドで実行されている同期コードからasyncio.Queueにアイテムを配置する最も簡単な方法

分類Dev

単純なイテレータをjavascriptジェネレータに変換する方法

分類Dev

セレクター$(this)を関数に渡す簡単な方法

分類Dev

アロケーターインスタンスを使用せずに、C ++でジェネリック型をデフォルトで構築する簡単な方法はありますか?

分類Dev

等しいをオーバーライドせずにカスタムの等しい関数を使用して2つのコレクションの違いを取得する簡単な方法はありますか?

分類Dev

システム全体のコンソールで実行する簡単な関数を作成するレール

分類Dev

データフレームでループを使用せずに単純なExcel最小計算を実行する

分類Dev

.applyを使用せずに、pandaデータフレームの単一列で簡単な操作を実行します

分類Dev

単一のCocoapod依存関係を持つボイラープレートCocoaTouch Frameworkプロジェクトでのボイラープレートユニットテストが、実行せずに失敗するのはなぜですか?

分類Dev

GIT:実際にファイルをマージせずに2つのブランチをマージする方法(簡単なマージ)

分類Dev

ジェネレーターを反復処理する簡単な方法は?

分類Dev

golangの異なるインターフェイスを使用して、単一のWebページで複数のテンプレートを実行する方法

分類Dev

すべてのオブジェクトを明示的に記述せずに、関数内のすべてのオブジェクトに言及する簡単な方法

分類Dev

C ++ 11の乱数:コードの1つの場所にジェネレーターをシードし、それをさまざまな関数で使用する簡単な方法はありますか?

分類Dev

C#実装せずにインターフェイスメソッドを単体テストする方法

分類Dev

実際のデバイスのフレームワークにアクセスせずにプロジェクトを実行する

分類Dev

Java:EL式を評価する方法-インターフェースを実装せずにスタンドアロン(Webフレームワークの外)

分類Dev

ページをリロードせずに条件が真になるたびに関数を実行する

分類Dev

Python:実行時にジェネレーターを作成する

分類Dev

C ++乱数ジェネレーター:実行ごとに乱数を作成する方法

分類Dev

再作成サーバーを作成せずにExpressでミドルウェアをテストする簡単な方法は?

分類Dev

ジェネレータを使用してpromiseを同期的に実行する方法

分類Dev

この関数を非同期ジェネレーターに変換する方法

分類Dev

テンプレートタイプを指定せずにジェネリック抽象クラスのオブジェクトを宣言する方法

分類Dev

リレーショナルDBを使用せずにJavaでオブジェクトを格納および取得する簡単な方法は?

Related 関連記事

  1. 1

    ジェネレーター/イテレーターのアイテム数を数える最も簡単な方法は何ですか?

  2. 2

    itertools.countと同等のイテレーターをジェネレーター関数を使用せずにPythonでどのように実装しますか?

  3. 3

    条件の異なるデータフレームを分割せずに数式を実行する方法

  4. 4

    Androidでは、カスタムウィジェットを作成せずに、実行時に単一のXMLレイアウトのTextViewにさまざまなテーマを適用できますか?

  5. 5

    別のスレッドで実行されている同期コードからasyncio.Queueにアイテムを配置する最も簡単な方法

  6. 6

    単純なイテレータをjavascriptジェネレータに変換する方法

  7. 7

    セレクター$(this)を関数に渡す簡単な方法

  8. 8

    アロケーターインスタンスを使用せずに、C ++でジェネリック型をデフォルトで構築する簡単な方法はありますか?

  9. 9

    等しいをオーバーライドせずにカスタムの等しい関数を使用して2つのコレクションの違いを取得する簡単な方法はありますか?

  10. 10

    システム全体のコンソールで実行する簡単な関数を作成するレール

  11. 11

    データフレームでループを使用せずに単純なExcel最小計算を実行する

  12. 12

    .applyを使用せずに、pandaデータフレームの単一列で簡単な操作を実行します

  13. 13

    単一のCocoapod依存関係を持つボイラープレートCocoaTouch Frameworkプロジェクトでのボイラープレートユニットテストが、実行せずに失敗するのはなぜですか?

  14. 14

    GIT:実際にファイルをマージせずに2つのブランチをマージする方法(簡単なマージ)

  15. 15

    ジェネレーターを反復処理する簡単な方法は?

  16. 16

    golangの異なるインターフェイスを使用して、単一のWebページで複数のテンプレートを実行する方法

  17. 17

    すべてのオブジェクトを明示的に記述せずに、関数内のすべてのオブジェクトに言及する簡単な方法

  18. 18

    C ++ 11の乱数:コードの1つの場所にジェネレーターをシードし、それをさまざまな関数で使用する簡単な方法はありますか?

  19. 19

    C#実装せずにインターフェイスメソッドを単体テストする方法

  20. 20

    実際のデバイスのフレームワークにアクセスせずにプロジェクトを実行する

  21. 21

    Java:EL式を評価する方法-インターフェースを実装せずにスタンドアロン(Webフレームワークの外)

  22. 22

    ページをリロードせずに条件が真になるたびに関数を実行する

  23. 23

    Python:実行時にジェネレーターを作成する

  24. 24

    C ++乱数ジェネレーター:実行ごとに乱数を作成する方法

  25. 25

    再作成サーバーを作成せずにExpressでミドルウェアをテストする簡単な方法は?

  26. 26

    ジェネレータを使用してpromiseを同期的に実行する方法

  27. 27

    この関数を非同期ジェネレーターに変換する方法

  28. 28

    テンプレートタイプを指定せずにジェネリック抽象クラスのオブジェクトを宣言する方法

  29. 29

    リレーショナルDBを使用せずにJavaでオブジェクトを格納および取得する簡単な方法は?

ホットタグ

アーカイブ