Pythonでは、return
とyield
は関数から値を返すために使用されますが、その動作は大きく異なります。
returnとyieldの基本的な違い
return
は関数から値を返し、その関数の実行を終了します。一方、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)
上記のコードを実行すると、30
、300
、3000
が順番に出力されます。
yieldの利点
yield
は、大規模なデータを扱う際や、リアルタイムでデータを処理する必要がある場合に特に有用です。なぜなら、ジェネレータ関数とyield
により、大量のデータを一度にロードする必要がなく、必要なときに値を生成できるからです。
例えば、大きなファイルを行ごとに読み込む場合、yield
を使用すると一度に全行をメモリに読み込む必要がなくなり、大きなファイルでもメモリを節約しながら処理を行うことが可能になります。
def read_large_file(file_path):
with open(file_path, "r") as file:
for line in file:
yield line
上記のコードは、大きなファイルを行ごとに読み込むジェネレータ関数の例です。
まとめ
Pythonのreturn
とyield
は、関数から値を返すために使用されますが、その動作は大きく異なります。return
は関数の実行を終了しますが、yield
は関数の実行を一時停止し、後で再開することができます。この特性により、yield
は大規模なデータを扱う際や、リアルタイムでデータを処理する必要がある場合に特に有用です。