最後に減らすものについて説明しましょう｡ これは少し高度で､ 最初は把握するのが難しいかもしれません｡ しかし､
その存在を知っておくことは良いことで､ 自分で練習したりドキュメントを読んだりすることで､
より詳しく学ぶことができます｡
現在､ Reduceはpythonのビルトイン機能の一部として提供されているわけではありません｡
reduceを使うためには､ 次のようなことをしなければならない｡
さて､ このようなことは初めてだと思いますが､ これはコースのモジュールセクションで説明することです｡
しかし､ 本質的にここで起こっていることは､ PythonインタプリタとPythonパッケージをダウンロードしたとき､ この場合､
このリップルはすでに私たちのためにそれをやってくれています｡
ファンクツールとは､ Pythonのインストールに付属する機能的なツールに使えるツールベルトのようなもので､
このファンキーツールから何かをインポートすることができるのです｡
そして､ そこから具体的な機能をインポートすることができるのです｡
つまり､ このツールベルトのファンクツールから､ reduce関数をインポートして､ 私たちのコードで再び使えるようにしてほしいということなんです｡
だから､ とりあえず､ この行をコピー＆ペーストしてください｡
次に､ リストの一部を削除して､ ここではreduceを使ってみましょう｡
さて､ リダクションでは､ いくつかのものが必要になってきます｡
最初に
機能が必要です｡
そして､ シーケンスやデータが必要です｡
では､ その機能はどうなるのでしょうか？
まず､ データはマイリストになります｡
そこで､ マイリストと還元機能で面白いことができると言うわけです｡
例えば関数を与えて､ この関数がアキュムレータを呼び出すことができるんだ｡
そして､ アキュムレータは2つのパラメータを取る｡
そして､ これはリデュースで呼ばれるようになることを忘れないでください｡
そこでReduceは､ 私のリストというデータから､ この2つのパラメータを与えることを担当することになります｡
最初のパラメータは､ アキュムレータと呼ばれるもので､ 私の場合はACCとします｡
そして､ ここがアイテムになります｡
さて､ ここからが本当に面白いのですが､ 最初に私のリストをreduceから渡すと､ 最初の項目が表示されます｡
最初の項目は､ このパラメータになります｡
しかし､ このアッシジは当初何なのだろう｡
まあ､ ここの括弧を外せばいいんですけどね｡
そして､ 減らすことを示す｡
機能があるのがわかりますね｡
シーケンス（この場合はリスト）｡
そして､ initialとinitialは､ アキュムレータがどうなるかということです｡
そこでもう一度､ まだ呼び出すことのないアキュムレータ関数を用意するとします｡
レデュースがそれをやってくれるんです｡
リストにあげます｡
あるいは反復処理したいデータ｡
そして､ 初期値として0を与えることにします｡
だから､ 3つあるんです｡
パラメータはここか､ それを与える3つの引数｡
括弧を閉じさせていただきます｡
これでよしとする｡
ここで少し大きくして､ スペルを確認しましょう｡
ここで､ 最初の項目は､ 私のリストの最初の項目であれば何でもいいのです｡
そして､ アキュムレータは何も与えなければデフォルトでゼロになります｡
あるいはこの場合､ アキュムレータは0になると言っています｡
そこで､ まず最初に､ アキュムレータにアイテムを加えたものを返すことにします｡
なるほど｡
では､ ひとつひとつ見ていきましょう｡
実際にここにアキュムレータとアイテムをプリントしてみます｡
そして､ このコードを実行します｡
15 行目 into object は反復可能ではありません｡
そして､ これは少し厄介なのですが､ 実はもうリストは必要ないのです｡ なぜなら､ Reduceが私たちのために面白いことをやってくれるからです｡
そこで､ とりあえずこれを削除し､ reduceが出力するものをそのまま返すことにしましょう｡
実行」をクリックすると
あれを見てください｡
よし､ それでどうなったんだ？
見てみよう｡
削減する｡
イテラブルに与えた値から､ 何か､ ある種の値を減らすことができるようになります｡
では､ 一歩一歩進んでいきましょう｡
私のリストがあり､ 私のリストはreduceを通してaccumulatorに適用される予定です｡
アキュムレータは私のリストを受け取り､ 最初のパススルーで最初に行うことは､ 「おい､ アキュムレータは何にするんだ」と言うことです｡
ゼロにする｡
つまり､ アキュムレータを最初に通過するのは0になるわけです｡
アイテムは1つになります｡ これはこちらに見えるもので､ それをゼロに1を足したものになります｡
それで今､ 1つ返しました｡
さて､ 2つ目のパスですが
何が起こるか
2回目のアキュムレータの通過は､ これが返したものになる｡
だから､ これが返されたものの次のパスは､ アキュムレータに充填されることになる｡
つまり､ 私たちの場合､ 0＋1は1になるのです｡
アイテムになります｡
1＋2が3になる
つまり､ 1＋2＝3ということです｡
ですから､ 次はアキュムレータが3になって､ ここにあるように通過するものも3になってしまいます｡
そして､ 3＋3は6｡
これらの値をすべて積み上げて､ ひとつの数字6を返したところです｡
リストをある種のデータに変換し､ この場合はアキュムレータを使って操作します｡
でも､ ここでは何でもできたんです｡
では､ 例えばこれをnot equal tenに変更した場合､ 「実行」をクリックするとどうなると思いますか？
16になったのは､ 最初のアキュムレータを10で始めたからで､ その時は10プラス1､ といった具合に｡
これでいろいろなことができるようになり､ 本当に､ 本当に強力になりました｡
本当に､ 自由自在なんです｡
そして実は､ map filterのような関数は､ このreduceをボンネットの下で使っているので､ reduceを使った独自のmapやfilter関数を実際に構築することができます｡
しかし､ これは上級プログラマーが本当に大好きな機能で､
キャリアを積めば積むほど､ より多くのことを経験できるようになります｡
次回作でお会いしましょう｡
バイバイ｡