Pythonは、最近広く使用されている汎用プログラミング言語です。 yieldは、ジェネレーター関数を作成するために使用される組み込みのPythonキーワードです。その関数は一連の結果を生成します。プログラムの実行を一時停止し、結果値を呼び出し元に送り返し、最後のyieldから実行を再開します。さらに、yield関数は、生成された一連の結果をジェネレーターオブジェクトの形式で送信します。一方、returnは、関数を終了して値を呼び出し元に送り返すPythonの組み込みキーワードでもあります。
この記事では、歩留まりと収益の違いについて例を挙げて概説します。
歩留まりと収益の違い
そもそも、歩留まりと収益には多くの顕著な違いがあります。まず、これらについて説明しましょう。
戻る | 収率 |
---|---|
returnステートメントは、単一の値のみを呼び出し元に返します。 | yieldステートメントは、一連の結果をジェネレーターオブジェクトの形式で呼び出し元に返すことができます。 |
リターンは関数を終了し、ループの場合はループを終了します。これは、関数内に配置される最後のステートメントです。 | 関数のローカル変数は廃止されません。実行を一時停止して値を呼び出し元に送り返し、最後のyieldステートメントからプログラムの実行を続行します。 |
論理的には、関数にはreturnステートメントのみが必要です。 | 関数内に複数のyieldステートメントが存在する可能性があります。 |
returnステートメントは1回しか実行できません。 | yieldステートメントは複数回実行できます。 |
returnステートメントは、通常のPython関数内に配置されます。 | yieldステートメントは、通常の関数をジェネレーター関数に変換します。 |
例1:リターンとイールド
それでは、例を通してreturnステートメントとyieldステートメントの違いを見てみましょう。以下に示すサンプルプログラムでは、複数のreturnステートメントを使用しています。プログラムの実行は最初のreturnステートメントの後で終了し、残りのコードは実行されないことがわかります。
#returnステートメントの動作を示すプログラム
#数値変数の定義
num1=10
#数値変数の定義
num2=20
#算術演算を実行する関数を作成する
def mathOP(()。:
#合計値の計算
戻るnum1+num2
#差を計算する
戻るnum1-num2
#乗算値の計算
戻るnum1*num2
#除算値の計算
戻るnum1/num2
#関数を呼び出す
印刷((mathOP(()。)。
出力
出力では、関数が最初の値のみを返し、プログラムが終了していることがわかります。
複数のreturnステートメントを使用して同様のタスクを実行するには、算術演算のタイプごとに4つの異なる関数を作成する必要があります。
#returnステートメントの動作を示すプログラム#数値変数の定義
num1=10
#数値変数の定義
num2=20
#算術演算を実行する関数を作成する
def sumOP(()。:
#合計値の計算
戻るnum1+num2
defsubtractOP(()。:
#差を計算する
戻るnum1-num2
defmultipliationOP(()。:
#乗算値の計算
戻るnum1*num2
def DivisionOP(()。:
#除算値の計算
戻るnum1/num2
#合計関数を呼び出す
印刷(('合計値は次のとおりです:'、sumOP(()。)。
#減算関数の呼び出し
印刷(('差の値は次のとおりです:'、減算OP(()。)。
#乗算関数を呼び出す
印刷(('乗算値は次のとおりです:'、乗算OP(()。)。
#除算関数の呼び出し
印刷(('除算値は次のとおりです:'、DivisionOP(()。)。
出力
これらの複数の算術演算は、複数のyieldステートメントを使用して単一のジェネレーター関数内で実行できます。
#yieldステートメントの動作を示すプログラム#数値変数の定義
num1=10
#数値変数の定義
num2=20
#算術演算を実行する関数を作成する
def mathOP(()。:
#合計値の計算
収率num1+num2
#差を計算する
収率num1-num2
#乗算値の計算
収率num1*num2
#除算値の計算
収率num1/num2
#関数を呼び出す
印刷(('値の印刷:')。
#generatorオブジェクトから値にアクセスするためのforループの使用
にとって私はmathOPにいます(()。:
印刷((私)。
出力
例2:リターンとイールド
returnステートメントとyieldステートメントの別の例を見てみましょう。与えられた例では、引数としてmod()関数に渡される数値のリストがあります。リストの各数に対して剰余演算を実行し、10で割ったときのそれらの数が剰余値としてゼロを返すかどうかを確認しています。
まず、returnステートメントを使用してPythonスクリプトにこの例を実装しましょう。
#数字のリストを定義する私のリスト=[10、20、25、30、35、40、50]
#モジュラス演算を実行する関数を定義する
def mod((私のリスト)。:
にとってmyListの私:
#モジュラス演算の実行
もしも((私%10==0)。:
戻る私
印刷((に対して((私のリスト)。)。
出力
returnステートメントは、最初の番号のみを呼び出し元に返し、関数の実行を終了します。
それでは、yieldステートメントを使用してPythonスクリプトに同じ例を実装しましょう。
#数字のリストを定義する私のリスト=[10、20、25、30、35、40、50]
#モジュラス演算を実行する関数を定義する
def mod((私のリスト)。:
にとってmyListの私:
#モジュラス演算の実行
もしも((私%10==0)。:
#yieldステートメント
収率私
にとって私はmodで((私のリスト)。:
印刷((私)。
出力
結論
結論として、returnとyieldは、2つの組み込みPythonキーワードまたはステートメントです。 returnステートメントは、関数から呼び出し元に値を返し、プログラムの実行を終了するために使用されます。一方、yieldステートメントは、ジェネレーターオブジェクトを生成し、プログラムの実行を終了せずに複数の値を呼び出し元に返すことができます。この記事では、returnステートメントとyieldステートメントの顕著な違いをすべて例とともに示します。