Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ イテレータの連結と合成 | Python Iterators
Pythonにおける関数型プログラミングの概念

bookイテレータの連結と合成

メニューを表示するにはスワイプしてください

イテレータの連結と合成は、Pythonで強力なデータパイプラインを構築する手法。シンプルなイテレータやジェネレータ関数を連結することで、データを段階的に処理し、各段階でデータを変換またはフィルタリングして次に渡すことが可能。複数の操作を順番に適用したい場合、例えばアイテムのフィルタリング後に変換を行う、または複数のソースからデータを結合する場合に特に有用。上記の動画では、ジェネレータパイプラインを活用してコードをモジュール化し、メモリ効率を高め、中間リストの作成を避ける方法を示している。

具体例として、数値のシーケンスから偶数を除外し、残りの数値を二乗するケースを考える。これは、フィルタリング用と変換用の2つのジェネレータ関数を連結することで実現可能。この方法により、各アイテムは必要なときだけ処理され、コードが簡潔かつ効率的になる。

12345678910111213141516171819
def filter_odds(numbers): for n in numbers: if n % 2 != 0: yield n def square_numbers(numbers): for n in numbers: yield n ** 2 # Original data data = range(10) # Chain the generators: first filter, then transform filtered = filter_odds(data) squared = square_numbers(filtered) # Collect results result = list(squared) print(result) # Output: [1, 9, 25, 49, 81]
copy

最初の関数 filter_odds は、数値のイテラブルを受け取り、奇数のみを生成。2つ目の関数 square_numbers は、イテラブルを受け取り、各数値の二乗を生成。filter_odds の出力を直接 square_numbers に渡すことで、まずフィルタリングし、その後データを変換するパイプラインを構築。最終結果はリストにまとめて出力し、0から9までの奇数の二乗が表示される。

この方法は、各値を一度に1つずつ処理するためメモリ効率が高く、中間リストを作成しない。また、各ジェネレータ関数が単一の役割を持つため、コードのモジュール性が向上し、異なるパイプラインでも再利用可能。

question mark

Pythonでイテレータやジェネレータを連結する利点はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 5.  6
some-alt