Pythonのジェネレーターとは何ですか?それらの使用方法は?



Pythonのジェネレーターとその利点について学びます。また、さまざまなユースケースとともに、それらを作成して使用する方法も学びます。

反復可能オブジェクトまたはそれらをステップオーバーできるオブジェクトを生成することは、面倒な作業と見なされます。しかし、 、この面倒なタスクの実装は本当にスムーズになります。それでは、先に進んで、Pythonのジェネレーターを詳しく見てみましょう。

この記事で取り上げたすべてのトピックのリストは次のとおりです。





それでは始めましょう。 :)

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

ジェネレーターは基本的に、トラバース可能なオブジェクトまたはアイテムを返す関数です。これらの関数は、すべてのアイテムを一度に生成するのではなく、必要な場合にのみ一度に1つずつ生成します。いつでも アイテムのセットを反復処理するために含まれている場合、ジェネレーター関数が実行されます。ジェネレータには多くの利点もあります。



ジェネレーターを使用する利点

  • Pythonにジェネレーターがないと、反復可能オブジェクトの作成は非常に難しく、時間がかかります。

  • ジェネレーターは、__ iter __()、__ next __()、およびStopIterationを自動的に実装するため、実装が簡単です。それ以外の場合は、明示的に指定する必要があります。



    C ++で数値をソートする方法
  • 通常とは異なり、必要に応じてアイテムが作成されるため、メモリが節約されます 。この事実は、膨大な数のイテレータを作成する必要がある場合に非常に重要になります。これは、発電機の最大の利点とも考えられています。

  • 無限の数のアイテムを生産するために使用できます。

  • また、多くの操作をパイプライン化するために使用することもできます

通常の機能とジェネレーターの機能:

Pythonのジェネレーターは、作成方法と同じように作成されます 「def」キーワードを使用します。ただし、ジェネレーター関数は、returnではなくyieldキーワードを使用します。これは、これがイテレータであることをインタプリタに通知するために行われます。これだけでなく、Generator関数は、next()関数が呼び出されたときに実行され、通常の関数の場合のように名前では実行されません。それをよりよく理解するために、次の例を検討してください。

例:

def func(a):yield a a = [1,2,3] b = func(a)next(b)

出力: [1、2、3]

ご覧のとおり、上記の出力では、func()はyieldキーワードと次の関数を使用して実行しています。ただし、通常の機能では、次のコードが必要になります。

例:

def func(a):a = [1,2,3] func(a)を返します

出力: [1、2、3]

上記の例を見ると、通常の関数も同じ出力を返しているのに、なぜジェネレーター関数を使用するのか疑問に思われるかもしれません。それでは、先に進んで、Pythonでジェネレーターを使用する方法を見てみましょう。

ジェネレーター関数の使用:

前述のように、Pythonのジェネレーターは一度に1つずつ反復可能オブジェクトを生成します。次の例を見てください。

例:

def myfunc(a):while a> = 3:yield a a = a + 1 b = myfunc(a)print(b)next(b)

次の関数を実行すると、次の出力が表示されます。

出力: 4

ここでは、while条件を満たす1つの反復可能なオブジェクトが返されています。実行後、制御は呼び出し元に転送されます。さらにアイテムが必要な場合は、next()関数を呼び出して同じ関数を再度実行する必要があります。

next(b)

出力: 5

それ以上実行すると、関数は6,7などを返します。Pythonのジェネレーター関数は、__ iter __()メソッドと__next __()メソッドを自動的に実装します。したがって、next()メソッドを使用するだけで、オブジェクトを反復処理できます。アイテムの生成が終了する必要がある場合、ジェネレーター関数は StopIteration 発信者を心配することなく内部的に。これの別の例は次のとおりです。

例:

a = 2 def myfunc(a):while a> = 0:yield a a- = 1 b = myfunc(a)print(b)next(b)

出力:

StopIteration-Pythonのジェネレーター-Edureka上の画像は、プログラムの実行に必要な回数を示しています。次の関数を再度呼び出そうとすると、次の関数を表すメッセージが返されます。 StopIteration 実装されています。通常の関数でこれを実行しようとしても、返される値は変更または反復されません。以下の例を見てください。

例:

def z():n = 1収量nn = n +3収量np = z()next(p)

出力:

ループ付きのジェネレーター:

同じ関数を一度に実行したい場合は、「for」ループを利用できます。このループは、オブジェクトを反復処理するのに役立ち、すべての実装の後にStopIterationを実行します。

例:

def z():n = 1 yield n n = n + 3 yield n for x in z():print(x)

出力:

1
4

式を指定して、反復可能なオブジェクトを生成することもできます。

ジェネレータ式:

forループとともに式を使用してイテレータを生成することもできます。これにより、通常、反復可能な生成が非常に簡単になります。ジェネレータ式はリスト内包表記などに似ています ラムダ関数 、ジェネレータ式は匿名のジェネレータ関数を作成します。

以下の例を見てください。

例:

a = range(6)print( 'リスト内包'、end = ':')b = [x + 2 for x in a] print(b)print( 'ジェネレータ式'、end = ':n')c = (aのxの場合はx + 2)cのyの場合はprint(c):print(y)

出力:

goto c ++の例

リスト内包表記:[2、3、4、5、6、7]

ジェネレータ式:

2
3
4
5
6

ご覧のとおり、上記の出力では、最初の式は[]括弧内に指定されたリスト内包表記です。リスト内包表記は、アイテムの完全なリストを一度に作成します。次は、同じアイテムを一度に1つずつ返すジェネレータ式です。 ()括弧を使用して指定します。


発生器関数は他の関数内でも使用できます。例えば:

例:

a = range(6)print( 'ジェネレータ式'、end = ':n')c =(x + 2 for x in a)print(c)print(min(c))

出力:

ジェネレータ式
2

上記のプログラムは、上記の式がaの値に適用されると、最小値を出力します。

talendetlツールチュートリアルpdf

ユースケース:

でジェネレータを使用しましょう に:

  • フィボナッチ数列を生成する
  • 番号の生成

フィボナッチ数列の生成:

ご存知のとおり、フィボナッチ数列は一連の数であり、各数は先行する2つの数の合計です。最初の2つの数値は0と1です。これはフィボナッチ数列を生成するためのジェネレータプログラムです。

例:

def fibo():first、second = 0,1 while True:yield first first、second = second、first + second for x for fibo():if x> 50:break print(x、end = '')

出力:

0 1 1 2 3 5 8 13 21 34

上記の出力は、値が50未満のフィボナッチ数列を示しています。次に、数値のリストを生成する方法を見てみましょう。

番号の生成:

指定されたリスト番号を生成したい場合は、ジェネレーター関数を使用して生成できます。次の例を見てください。

例:

a = range(10)b =(x for x in a)print(b)for y in b:print(y)

出力:

0
1
2
3
4
5
6
7
8
9

例:

a = range(2,10,2)b =(x for x in a)print(b)for y in b:print(y)

出力:


2
4
6
8

上記のプログラムは2から10までの偶数を返しました。これでPythonのジェネレータに関するこの記事は終わりです。あなたがすべてのトピックを理解したことを願っています。

できるだけ練習し、経験を元に戻してください。

質問がありますか?この「GeneratorsinPython」ブログのコメントセクションでそのことを伝えてください。できるだけ早くご連絡いたします。

Pythonとそのさまざまなアプリケーションに関する詳細な知識を得るには、ライブに登録できます。 24時間年中無休のサポートと生涯アクセス。