Pythonのlambda式の使い方
Pythonではlambda式を使って無名関数を作ることができます。
無名関数はその名のとおり「名前(関数名)のない関数」です。
匿名関数と呼ばれたりもします。
lambdaは「ラムダ」と読みます。
本来関数は「def」を使って宣言しますが、lambda式を使えば、その時だけ有効な関数を定義することができます。
Pythonのlambda式の作り方
Pythonでlambda式は「lambda 引数1, 引数2,… : 処理」で記述します。
func1 = lambda x, y, z : x + y + z print( func1( 10, 20, 30 ))
上記のコードを実行すると
60
とちゃんと引数のx,y,zを足した値が返されます。
lambda式の使いどころ
lambda式はどのような場面で使えるのかいくつか例をあげておきます。
関数を引数に取る関数への引数としてのlambda式
関数の中には引数に他の関数(のアドレス)を引数に取るものがあります。
例えばストや辞書、文字列といったイテラブルを指定したキーでソートしてくれるsort()関数は以下のような使い方をします。
sorted( iterable, key, reverse ) #iterable ソートしたいリストや辞書、文字列といったイテラブルを設定 #key ソートしたい項目を設定(オプションなので省略可) #reverse 逆順でのソートを設定(オプションなので省略可)
この「key」に「要素xを受け取ってx[“年齢"]を返す関数」を指定します。
import pprint person = [ { "名前": "トラスト太郎", "年齢": 50, "所属": "大阪", }, { "名前": "トラスト花子", "年齢": 25, "所属": "東京", }, { "名前": "トラスト次郎", "年齢": 20, "所属": "福岡", }, { "名前": "トラスト良子", "年齢": 30, "所属": "東京", } ] func1 = sorted( person, key=lambda x: x[ "年齢" ]) pprint.pprint( func1 )
上記のコードを実行すると
[{'名前': 'トラスト次郎', '年齢': 20, '所属': '福岡'}, {'名前': 'トラスト花子', '年齢': 25, '所属': '東京'}, {'名前': 'トラスト良子', '年齢': 30, '所属': '東京'}, {'名前': 'トラスト太郎', '年齢': 50, '所属': '大阪'}]
と「年齢」をキーにソートされていることがわかります。
このようにここでしか利用しないような簡単な関数をlambda式を使えばわざわざ別で関数定義をすることなく、処理を行うことができます。
lambda式でのif文
次はlambda式でif文を書く方法です。
filter関数はリスト型で条件に当てはまるものだけを取り出す関数です。
filter(関数, リスト)
この「関数」にlambda式で作ったif文を含んだ関数を渡します。
以下のコードでは年齢が40歳以下の人だけ抜き出してリスト化します。
import pprint person = [ { "名前": "トラスト太郎", "年齢": 50, "所属": "大阪", }, { "名前": "トラスト花子", "年齢": 25, "所属": "東京", }, { "名前": "トラスト次郎", "年齢": 20, "所属": "福岡", }, { "名前": "トラスト良子", "年齢": 30, "所属": "東京", } ] func1 = filter( lambda x : x[ "年齢" ] <= 40, person ) pprint.pprint( list( func1 ))
上記のコードを実行すると
[{'名前': 'トラスト花子', '年齢': 25, '所属': '東京'}, {'名前': 'トラスト次郎', '年齢': 20, '所属': '福岡'}, {'名前': 'トラスト良子', '年齢': 30, '所属': '東京'}]
と「50歳のトラスト太郎さん」が除かれたリストが作成されました。
まとめ
Pythonのlambda式を使えば、その時にしか利用しない簡単な関数をわざわざ別で関数定義をすることなく、無名関数として定義でき、処理を行うことができます。