Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでreturnの代わりにyieldを使用するのはいつですか?


つまり、制御がプログラムのreturnステートメントに到達するたびに、プログラムの実行は終了し、残りのステートメントは実行されません。

ただし、yieldの場合、制御がプログラムのyieldステートメントに到達すると、プログラムの実行が一時停止され、後で他のステートメントを機能させ続けることができます。

両方のステートメントを詳しく理解しましょう。

収量

関数でyieldステートメントを使用すると、その関数はループで使用できるジェネレーター関数になります。関数が実行され、yieldステートメントが実行されると、yieldの後の値は、それを呼び出したループに戻されます。次回ループが繰り返されると、関数はyieldステートメントの直後に開始されます。

def func():
   yield 1
   yield 2
   yield 3

for num in func():
   print(num * num)

出力

1
4
9

上記のプログラムでは、関数を呼び出すループは、func関数が完了すると完了します–関数の終わり(func())またはreturnステートメントのいずれかを満たします。

ただし、同じジェネレーター関数を使用する新しいループは、最初から関数を実行します。

戻る

リターンステートメント

  • 関数の実行を停止し、オプションで呼び出し元に値を返すために使用されます。 (上記のyieldとは異なり)return(yieldではない)を持つ関数はループで使用できません。

  • 以前に実行した関数を再度呼び出すと、その関数は最初から実行を開始します(上記のyieldとは異なります)。

リターンまたはイールドを使用するのはいつですか?

ただし、リソースの制約があるため、またはシーケンス全体をメモリに保存したくない場合は、シーケンスを反復処理するときにyieldを使用することをお勧めします。その他の場合は、returnステートメントの使用を検討できます。

整数の2乗を生成するためにyieldステートメントを使用する別のプログラムを見てみましょう。

def Square():
   i = 1;
   # An Infinite loop to generate squares
   while True:
      yield i*i
      i += 1 # Next execution resumes from this point
for num in Square():
   if num > 100:
      break
   print(num)

出力

1
4
9
16
25
36
49
64
81
100

通常、yieldステートメントはtryのtry句では使用されません…。ジェネレータが再開される保証はないため、finallyブロックします。したがって、finallyブロックが実行される保証はありません。


  1. ExcelでVLOOKUPの代わりにインデックス一致を使用する場合

    Excelに精通している方は、 VLOOKUPに精通している可能性があります。 関数。 VLOOKUP 関数は、同じ行内の一致するテキストに基づいて、別のセルの値を見つけるために使用されます。 まだVLOOKUPを初めて使用する場合 関数については、ExcelでVLOOKUPを使用する方法に関する以前の投稿を確認できます。 強力であると同時に、 VLOOKUP 数式が機能するために一致する参照テーブルを構造化する方法に制限があります。 この記事では、 VLOOKUPの制限について説明します。 使用できず、Excelに INDEX-MATCHという別の関数を導入できません

  2. 関数にPythonで図を返すようにするには(Matplotlibを使用)?

    関数がPythonで(Matplotlibを使用して)図を返すようにするには、次の手順を実行できます- 図のサイズを設定し、サブプロット間およびサブプロットの周囲のパディングを調整します。 xを作成します およびy numpyを使用したデータポイント。 関数を作成するplot(x、y) figure()を使用して、新しいフィギュアを作成するか、既存のフィギュアをアクティブにします メソッド。 xをプロットします およびy plot()を使用したデータポイント 方法; figインスタンスを返します。 plot(x、y)を呼び出します メソッドを実行し、Fi