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」を使用することで、ジェネレーターのネストや反復処理を効率的に行うことができます。