Python 3.3の「yield from」構文について
Python 3.3から導入された「yield from」構文は、ジェネレーターをより効果的に使用するための機能です。この構文を使用することで、ジェネレーターから別のジェネレーターへの委譲が容易になり、ネストされたジェネレーターをスッキリと表現できます。
主な使用方法
「yield from」構文は、外部のジェネレーターから内部のジェネレーターに値を委譲するために使用されます。具体的には、外側のジェネレーターから内側のジェネレーターに処理を委譲し、内側のジェネレーターが完了すると外側のジェネレーターに制御が戻ります。
具体的な例
def numbers_up_to(n):
for i in range(1, n + 1):
yield i
def square_numbers(n):
for num in numbers_up_to(n):
yield num ** 2
def cube_numbers(n):
for num in square_numbers(n):
yield num ** 3
result = cube_numbers(3)
for num in result:
print(num)
上記の例では、最初のジェネレーター「numbers_up_to」から「square_numbers」、そして「square_numbers」から「cube_numbers」へと値を委譲しています。最終的に、3までの数値の3乗が順番に出力されます。
さらなる例
def chain_generators(*generators):
for gen in generators:
yield from gen
gen1 = numbers_up_to(2)
gen2 = square_numbers(2)
gen3 = cube_numbers(2)
chained_gen = chain_generators(gen1, gen2, gen3)
for num in chained_gen:
print(num)
この例では、複数のジェネレーターを連結する「chain_generators」関数を定義し、それぞれのジェネレーターを結合して1つのジェネレーターとして扱っています。最終的に、1から2までの数値、その2乗、そしてその3乗が順番に出力されます。
Python 3.3で導入された「yield from」構文は、ジェネレーターを介して別のジェネレーターから値を取得するための便利な方法です。主な使用方法は、ジェネレーター内で別のジェネレーターを呼び出し、そのジェネレーターが生成する値を直接返すことができる点です。これにより、ネストされたジェネレーターを簡潔に表現でき、コードの可読性が向上します。また、「yield from」を使用することで、ジェネレーターのネストや反復処理を効率的に行うことができます。
