┗【プログラミング】TurboGearsでPythonを始めてみよう![6]こんにちは、オブジェクト倶楽部のももんがあ、やっとむです。木から木へと、身軽に飛び移るのがモモンガです。言語から言語へ、技術から技術へと、気軽に移行したいもの。前回は、Pythonのクラスとオブジェクトについての解説をしました[1]。実装の裏側が垣間見えてしまうため、そこをうまく使ってメタプログラミングができるという話をしました。今回は、Pythonの別のプログラミングパラダイムである、関数型プログラミング[2]を紹介したいと思います。■□Pythonの関数型プログラミングは、Lispの機能を取り込む形で実現されています。Lispには基本的な言語要素としてラムダ式がありますが、Pythonにもラムダ式があります。Lispのものほど重要でも、強力でもありません。インタープリタで試してみます。y」がラムダ式です(1行目)。ここでは「xとyを引数として取り、x*yを返す式」を定義しています。このラムダ式を変数fに格納すると、fを関数のように呼び出すことができます(2行目)。数を作ってそれにfという名前を付けていることになります(4行目)。これでは、単に関数定義を簡略化しただけで、あまり面白くありません。ラムダ式が便利なのは、map()、reduce()、filter()などの関数と組み合わせて使うときです。リストなどの各要素にfを適用して、結果をリストにする。結果とリストの次の要素に適用して...と繰り返す。リストなどの要素から、fがTrueを返すもの以外を取り除く。map()を使って、リストの各要素を2倍にするには、次のように書けます。10]引数fとして、ラムダ式を渡しています。ラムダ式を使わないと、次のようにいったん関数を宣言しなくてはなりません。10]手間がだいぶ...そんなに変わりませんが、ラムダ式を使ったほうがシンプルに書けることがわかります。他の例も見てみましょう。関数型のパラダイムでプログラムを書くには、いくつか工夫も必要です。単純な関数では条件分岐ができません。条件分岐がないと普通の再帰もできません。Pythonでは、条件分岐を式で表現する方法がいくつかあります。「もしAならばB、さもなければC」という式を書く、いくつかのイディオムを紹介します[3]。BがFalse、0、None、空シーケンスになると機能しない。[B]または[C]というリストを作って、その要素を取り出す。BまたはCを返すラムダ式を作って、呼び出す。ラムダ式の使い方が怪しげに見える。B)というタプルから、Aをインデックスに使って取り出す。True=1、False=0になるのを利用。Python2.5から導入された新しい文法。関数型プログラミングでは再帰も頻繁に使用します。再帰とは、ある関数から自分自身を呼び出すことです。関数を書いてみましょう[4]。関数型言語で有名な遅延評価はPythonにはありませんが、ジェネレータを使うと部分的には再現することができます。カリー化はPython2.5から標準でサポートされました。数型のテクニックを知っていると、Pythonでスマートなコードを書くことができる場合がよくあります。役にはたたないとしても、違ったパラダイムを学ぶのもまたひとつの楽しみです。詳しくはこちらに情報があります。関係ないですが、再帰の例としてはフィボナッチ数が有名です。_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。-「なぜ」ではなくて「なに」を聞く遅ればせながら『デトックス』がマイブームの上田雅美です。『デトックス』とは英語で表記すると『detox』。解毒を意味する言葉だそうですが、一番のデトックスは飲んで愚痴を言うことだったりして(笑)●「なぜ」と「なに」の違いさて、今日はちょっとした言葉遣いについて考えてみたいと思います。私はコーチの仕事をしていますが、今日はクライアント(コーチを受ける人)にエピソードを紹介する許可をいただいたので、題材として考えてみましょう。皆さんにとっても身近な出来事ではないでしょうか?Aさん。