python 目次 - ray88’s diary
Python イテレータとジェネレータ - ray88’s diary
Python ジェネレータ式の実用例 - ray88’s diary
■サブジェネレータとは
サブジェネレータとは、ジェネレータの中で別のジェネレータやイテレータから値を取り出して返す仕組みです。
yield from を使うことで、複数のデータソースをまとめて1つの流れとして処理できます。
【基本の書式】
呼び出されれる側のコード(subgenerator.py に記載)
def main_gen(n): yield "start" yield from range(n, 0, -1) # 4,3, 2, 1 yield from "abc" # 'a', 'b', 'c' yield from [10, 20, 30] # 10, 20, 30 yield from sub_gen() # 'X', 'Y', 'Z' yield "end" #サブジェネレータ def sub_gen(): yield "X" yield "Y" yield "Z"
呼び出し元のコード(main.pyに記載)
import subgenerator gen = subgenerator.main_gen(4) print(list(gen))
出力結果
![]()
【実務での使用例】
# 複数のログファイルを1つのストリームとして処理 def read_all_logs(log_files): for filepath in log_files: with open(filepath) as f: yield from f # 各ファイルの全行を順番に返す # 使う logs = ['system.log', 'error.log', 'access.log'] for line in read_all_logs(logs): if 'ERROR' in line: print(line)