ホームページ > バックエンド開発 > Python チュートリアル > Pythonのジェネレーターとは何ですか?発電機は何に使われますか?

Pythonのジェネレーターとは何ですか?発電機は何に使われますか?

乌拉乌拉~
リリース: 2018-08-22 16:18:00
オリジナル
5252 人が閲覧しました

次の記事では、Python のジェネレーターとは何かについて学びます。 python ジェネレーター とは何か、pythonプログラミングジェネレーター が果たせる役割を理解します。

Python ジェネレーターとは何ですか?

リスト生成を使用すると、リストを直接作成できます。ただし、メモリの制約により、リストの容量には確実に制限があります。さらに、100 万個の要素を含むリストを作成すると、大量の記憶領域が必要になるだけでなく、最初の数要素にアクセスするだけで済む場合、後続の要素のほとんどが占有する領域が無駄になります。

では、リストの要素を特定のアルゴリズムに従って計算できれば、ループ中に後続の要素を継続的に計算できるでしょうか?これにより、完全なリストを作成する必要がなくなり、スペースを大幅に節約できます。 Python では、ループと計算を同時に行うこの仕組みをジェネレーター: ジェネレーターと呼びます。

ジェネレーター

を作成するには、さまざまな方法があります。

最初の方法は非常に簡単です。リスト生成の [] を () に変更してジェネレーターを作成するだけです:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
ログイン後にコピー
ジェネレーターを作成した後、for ループを使用して反復処理します。 StopIteration エラーについて心配する必要はありません。

ジェネレーターは非常に強力です。計算アルゴリズムが比較的複雑で、リスト生成のような for ループを使用して実装できない場合は、関数を使用して実装することもできます。

たとえば、有名なフィボナッチ数列では、最初と 2 番目の数値を除き、最初の 2 つの数値を加算することで任意の数値を取得できます。

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return &#39;done&#39;
ログイン後にコピー

次の代入ステートメントに注意してください。

a, b = b, a + b
ログイン後にコピー

t = (b, a + b) # t是一个tuplea = t[0]b = t[1]
ログイン後にコピー

と同等ですが、一時変数 t は明示的に書き出さなくても割り当てることができます。

上記の関数は、フィボナッチ数列の最初の N 個の数値を出力できます:

>>> fib(6)112358&#39;done&#39;
ログイン後にコピー

よく見ると、fib 関数が実際にフィボナッチ数列の計算を定義していることがわかります。最初の要素から開始して後続の要素を計算するこのロジックは、実際にはジェネレーターと非常によく似ています。

言い換えれば、上記の関数はジェネレーターからわずか 1 ステップ離れたところにあります。 fib 関数をジェネレーターに変えるには、print(b) を変更して b を生成します。

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:        yield b
        a, b = b, a + b
        n = n + 1
    return &#39;done&#39;
ログイン後にコピー

これは、

ジェネレーターを定義する別の方法です。関数定義に yield キーワードが含まれている場合、その関数は通常の関数ではなくジェネレーターになります。

>>> f = fib(6)
>>> f<generator object fib at 0x104feaaa0>
ログイン後にコピー

ここで、最も理解しにくいのは、ジェネレーターと関数の実行フローが異なることです。関数は順番に実行され、return ステートメントまたは関数ステートメントの最後の行に到達すると戻ります。ジェネレーターとなる関数は next() が呼び出されるたびに実行され、yield ステートメントに遭遇するとリターンし、再度実行されると最後に返された yield ステートメントから実行を継続します。 以上がこの記事の内容です。この記事では主に

pythonのジェネレーター

に関する知識を紹介します。上記の内容を理解するために活用していただければ幸いです。この記事で説明したことがあなたのお役に立ち、Python の学習が容易になることを願っています。

関連知識の詳細については、php 中国語 Web サイトの Python チュートリアル 列を参照してください。

以上がPythonのジェネレーターとは何ですか?発電機は何に使われますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート