とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

Pythonのラムダ式はfunctionで光る

WindowsでPython シリーズ その17


前回ラムダ式をやってみたけど、C#におけるLINQみたいに扱うことができるのが真骨頂だった。
これってどっちが真似してるんでしょうね。

map関数


pythonのマニュアルを見て、functionという言葉が出てきたら
「ラムダ式だ!」と考えるクセをつけておくのがいいかもしれない。
map関数の説明を見てみる。

function を、結果を返しながら iterable の全ての要素に適用するイテレータを返します。
なんのこっちゃ。
C#プログラマなら分かるかもしれない。これはLINQにおけるSelect()なのだと。
function って関数のことだから、無名関数であれ定義された関数であれ、
要するに関数ポインタを引数として渡すことができるんだよね。

要約すると、
map関数の第1引数には"関数(引数付き)"を指定してね。
第2引数で指定したリストの全部を、第一引数の関数に放り込んだ結果のオブジェクト(の場所?)を返却するよ。
こういうことなんでしょう。
戻り値はアドレスなので、それを適切に変換してやる。
つまりリストにキャストすると、人間にはその値が確認できます。

コードはこんな感じ。


結果
PythonMAP関数でラムダ式を使う

戻り値をlistに変換してるのがそれです。
コレをキャストしない場合は・・・何やらオブジェクトのアドレスが出てますね。

filter関数


filter関数はC#:LINQのwhereみたいなもんですね。
説明は以下
iterable の要素のうち function が真を返すものでイテレータを構築します。
つまり、リストとか辞書とか、タプルもいけるんかな?とにかくforで繰り返し項目にしていできるもんのうち
第一引数で指定した関数の結果のみを返却するよ!ってことですね。

例えば100以上とか。そういうのがfilterです。

コードとしては以下

先程map関数で第一引数の関数結果を返却したけど、今度は関数結果がtrueになるものだけを抽出するリストを返す。
そんな関数です。

結果
Pythonのfilter関数でラムダ式を使う

map関数の場合は関数の実行結果がみてとれます。
対してret3は、ラムダ式で指定した値に合致する値がリストとして取れてますね。

これはすごいぞ!

さいごに


ラムダ式はC#のLINQに似ている。
多分ラムダを使いこなすとすごいエレガントなコードになるんだろうな。
今は無理だけど基本構造を覚えていって立派なpythonerになりたいですね。
▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/177-2f19a8ee
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad