Python の yield キーワード

Muhammad Waiz Khan 2023年10月10日
Python の yield キーワード

このチュートリアルでは、Python での yield キーワードの目的と使用法について説明します。yield キーワードは、Python でジェネレーター関数を定義するために使用される Python ステートメントです。yield ステートメントは、関数の本体内でのみ使用できます。

ジェネレーター関数と通常の関数の主な違いは、ジェネレーター関数に return ステートメントの代わりに yield 式が含まれていることです。yield ステートメントは、ジェネレータイテレータと呼ばれる一連の値を出力として生成します。イテレータからの新しい値は、next() 関数または for ループを使用して取得できます。

next() 関数が呼び出されるたびに、または for ループが繰り返されるたびに、yield ステートメントは新しい値を生成または生成し、関数のロケーション実行状態、つまりローカル変数の値を保存します。など。新しい next() 関数の呼び出しまたは反復のたびに、各呼び出しで開始される return ステートメントとは異なり、yield ステートメントは最後に保存された状態から再開します。

Python の yield キーワードのサンプルコード

yield ステートメントの動作が明確になっているので、次にその使用法とサンプルコードを見てみましょう。大量のデータがあり、それを反復可能なオブジェクトに一度にロードできない場合、またはデータを読み取るためのよりメモリ効率の高い方法が必要であるとします。yield ステートメントを使用してジェネレーター関数を作成できます。関数は、各反復または next() 関数呼び出しでデータの新しいチャンクを読み取り、生成します。

以下のサンプルコードは、yield ステートメントを for ループとともに使用して、Python で単純なジェネレーター関数を作成する方法を示しています。以下のサンプルコードのジェネレーター関数 my_generator() は、1 から 100 までの新しい番号を生成し、99 が呼び出されるまで機能します。

def my_generator():
    for x in range(1, 100):
        print("new value is generated!")
        yield x

最初に、next() 関数を使用するか、反復によって値を生成するためのジェネレータイテレータオブジェクトが必要になります。

gen_iter = my_generator()

次に、next() 関数を使用してジェネレータイテレータから新しい値を取得しましょう。以下のサンプルコードに示すように、next() 関数を iterator.__next__() として使用することもできます。

val = next(gen_iter)
print("Value =", val)

val = gen_iter.__next__()
print("Value =", val)

出力:

new value is generated!
Value = 1
new value is generated!
Value = 2

新しい値を取得するもう 1つの方法は、for ループを使用してジェネレータイテレータオブジェクトを反復処理することです。以下のサンプルコードは、Python でジェネレータイテレータオブジェクトを反復処理する方法を示しています。

for val in gen_iter:
    print("Value =", val)

上記のコード例は、ジェネレーター関数で指定された範囲からすべての 99 値を生成します。

以下のサンプルコードに示すように、yield ステートメントを複数回使用することで、for ループなしでジェネレーター関数を作成することもできます。

def my_generator():

    x = 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x

それでは、新しいジェネレーター関数を使用して、for ループを使用してすべての値を生成しましょう。

gen_iter = my_generator()
for val in gen_iter:
    print("Value =", val)

出力:

new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3

関連記事 - Python Keyword