Python | サブジェネレータ関数の使い方

2021年5月27日

公開日:2021/5/27

Pythonでは,ジェネレータ関数を用いるとメモリの使用量を減らすことができる.ジェネレータ関数からジェネレータ関数を呼び出す処理をすることもできる.呼び出しを受けるジェネレータ関数をサブジェネレータ関数と呼ぶ.構文を作成する際にはyield fromが用いられる特徴がある.以下にサブジェネレータ関数を用いた構文を記載する.

◆実施環境

Python 3.8.8

■サブジェネレータ関数の作成

# 1の処理
def generator1(): # 2つ目のサブジェネレーター
  yield 'generator1のyield'
  return 'generator1のreturn'

def generator2(): # 1つ目のサブジェネレーター
  yield 'generator2のyield'
  x = yield from generator1()
  print(x)
  return 'generator2のreturn'

def generator3(): # ジェネレーター
  yield 'generator3のyield'
  x = yield from generator2()
  print(x)
  return('generator3のreturn')

gen = generator3()

print(next(gen)) # "generator3のyield"が出力
print(next(gen)) # "generator2のyield"が出力
print(next(gen)) # "generator1のyield"が出力
print(next(gen)) # "generator1のreturn, generator2のreturn,エラー(StopIteration: generator3のreturn)"が出力

■実行結果

# 1の結果
generator3のyield
generator2のyield
generator1のyield
generator1のreturn
generator2のreturn
Traceback (most recent call last): # エラー出力の最初の行
StopIteration: generator3のreturn # エラー出力の最後の行

以上