2024年1月9日InPython今回はPythonの便利なモジュールの1つ、functooolsモジュールが提供するreduceという機能の紹介です。Pythonを最速でマスターできるおすすめ動画講座5選functools.reduceとは?公式ドキュメント:functools.reduceこの公式ドキュメントでは、次のように解説が書かれています。左から右に累積的に適用します。意味がわかりませんね。あとの具体例で意味が明確に理解できるようになります。現段階では次の2点に注意を払っておいください。2つの引数を持つ関数が必要イテラブルの各要素に対して、その関数を「累積的」に適用これを意識しておいてもらえると、下記の具体例が理解しやすくなると思います。次に使い方を見ておきましょう。このような形となります。初期化処理なおイテラブル(オブジェクト)についての解説は「【初心者にもわかりやすく】Pythonのイテレータについて、その基本とfor文の仕組みを解説」という記事で解説していますので、ぜひご覧ください。このブログでも結構アクセス数の多い人気記事となっています。以下、具体例としてのコードを見ていきましょう。具体例その1さて、上でfunctools.reduceの引数について次のよう書きました。2つの引数を持つ関数が必要イテラブルの各要素に対して、その関数を「累積的」に適用これをわかりやすく理解するために次のようなコードを作りました。なしこのように設定しています。functools.resuceの第1引数となる関数は、2つの引数を持たなければなりません。いう2つの引数を設定します。コードの15行目から1行ずつ見ていきましょう。[1])これを実行すると、1となります。単一の要素しか持っていない場合、最初の要素が返されます。公式ドキュメント:functools.reduceという仕組みなっているからです。2)単純なタプルとなります。3)」という2つの要素からなるタプルがまた出来上がりました。このタプルの要素については次のようになっています。3という構造になっています。以下略という仕組みになっています。1つ前の処理の結果を利用(前提とする)という点が「累積的」という意味ですね。以上のことを理解していただければ、次のコード例2も理解が容易になるでしょう。65今回はfunctools.reduceの引数を次のようにしています。4今回はfunctools.reduceの第3引数として初期化の処理を担当するもの(initializer:イニシャライザ)として、「4」を設定しています。このようにinitializerが設定されると、まずそれが第2引数のイテラブルの最初の要素として設定されます。4)を実行すると、4という結果になります。それ以外の部分についてはコード内のコメントと、上の具体例1で解説した内容の通りとなります。'MS')となります。ジェネレータ関数はジェネレータイテレータオブジェクトを作りますが、そもそもイテレータオブジェクトはイテラブルオブジェクトの一種ですから、イテレータオブジェクトの一種であるジェネレータイテレータオブジェクトもイテラブルオブジェクトとして使うことが可能です。イテラブル⊃イテラブル∋ジェネレータイテレータという関係です。これらイテレータやジェネレータについては以下の記事をご覧ください。関連投稿Pythonの抽象基底クラス(ABC)の基本を解説。