Pythonのyield
とreturn
は、関数から値を返すために使用されますが、その動作は大きく異なります。
returnの動作
return
は、関数の処理を終了し、値を返します。以下に例を示します。
def foo():
a = 1
b = 2
return a # ここで処理を終えてaを返す
c = 3
return b
この例では、foo
関数はa
の値を返した後、処理を終了します。そのため、c = 3
やreturn b
は実行されません。
yieldの動作
一方、yield
は関数の処理を一時停止し、値を返します。そして、次に関数が呼び出されると、停止した箇所から処理を再開します。以下に例を示します。
def func():
a = 10
b = 20
c = a + b
yield c # ここで一旦停止
a = 100
b = 200
c = a + b
yield c # ここで一旦停止
a = 1000
b = 2000
c = a + b
yield c # ここで一旦停止
for x in func():
print(x)
この例では、func
関数はyield
ごとに値を返し、処理を一時停止します。その後、for
ループにより関数が再度呼び出されると、停止した箇所から処理を再開します。
まとめ
yield
とreturn
の主な違いは、return
が関数の処理を終了するのに対し、yield
は関数の処理を一時停止し、次に関数が呼び出されると停止した箇所から処理を再開する点です。これにより、yield
は大規模なデータセットの効率的な処理を可能にします。.