yield
は、Pythonのジェネレータを作成するためのキーワードで、関数の実行を一時停止し、その状態を保持しつつ、値を返すことができます。
関数が次に呼び出されるときには、yield
から実行が再開されます。これにより、大量のデータを一度にメモリに読み込まずに処理できるという利点があります。
以下に、yield
の便利な使い方をいくつか紹介します。
大量データの遅延評価
大量のデータを一度にメモリに読み込まずに処理するために使えます。
def read_large_file(file_path):
with open(file_path) as file:
for line in file:
yield line.strip()
# 使用例
for line in read_large_file('large_file.txt'):
print(line)
無限シーケンスの生成
無限に続くシーケンスを生成する場合にも使えます。
def infinite_sequence():
num = 0
while True:
yield num
num += 1
# 使用例
gen = infinite_sequence()
for _ in range(10):
print(next(gen))
フィボナッチ数列の生成
フィボナッチ数列のような特定のパターンのシーケンスを生成する場合に使えます。
def fibonacci_sequence():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 使用例
fib = fibonacci_sequence()
for _ in range(10):
print(next(fib))
データストリームの処理
リアルタイムデータストリームを処理する場合にも役立ちます。
pythonコードをコピーするimport time
def data_stream():
while True:
data = get_next_data() # 例:センサーデータを取得する関数
yield data
time.sleep(1)
# 使用例
for data in data_stream():
process(data) # データを処理する関数
複数のイテレータの結合
複数のイテレータをシーケンスとして結合する場合に使えます。
def chain(*iterables):
for it in iterables:
for element in it:
yield element
# 使用例
for item in chain([1, 2, 3], ['a', 'b', 'c']):
print(item)
まとめ
yield
を使うことで、メモリ効率の良いデータ処理や、無限シーケンスの生成、リアルタイムデータの処理など、さまざまな場面で柔軟に対応できます。
これにより、Pythonのプログラムはより効率的かつ効果的にデータを扱うことができます。