lambda式とは?
無名関数を記述する方法
無名関数とは?
・関数宣言をせずに使える関数
・一度だけしか使われない使い捨ての関数。名前をつける必要がないため無名関数と呼ばれる
使い方
lambda 引数:返り値
コロンの左側に記述されたオブジェクトは引数。
式の中のオブジェクト名はxがよく使われているが、aでもhogeでもOK
例) lambda式を使わない場合
コード
def test(a): return a * 2 b = test(3) print(b)
実行結果
6
例) lambda式を使う場合
コード
b = lambda a: a * 2 print(b(3)) print(type(b))
実行結果
6 <class 'function'>
よく見る使われ方
高階関数と一緒に利用される。
※高階関数は、関数を引数にしたり戻り値にする関数
例) map関数と使うケース
map関数は、引数に関数とリストを取る。
リストの各要素に対し指定された関数処理をするgeneratorオブジェクトを返す。
コード
l = map(lambda x: x ** 2, [1, 2, 3]) print(l.__next__()) print(l.__next__()) print(l.__next__())
実行結果
1 4 9
例) sorted関数のkeyパラメータとの使われ方1
sorted関数のkeyパラメータは比較を行う前にリストの各要素に対して呼び出される★関数★を指定するパラメータ
並べ替えは、関数の実行結果を使って行われる。
ソート HOW TO — Python 3.6.1 ドキュメント
コード
a = [1,2,3] b = sorted(a) print(b) b = sorted(a, key=lambda x: x * -1) print(b)
実行結果
[1, 2, 3] [3, 2, 1]
各要素に対してlambda式で指定した無名関数(-1で掛け算)を実行した結果を使ってソートする。
例) sorted関数のkeyパラメータとの使われ方2
コード
a = [[0,10], [1,9], [2,8]] b = sorted(a) print(b) b = sorted(a, key=lambda x: x[1]) print(b)
実行結果
[[0, 10], [1, 9], [2, 8]] [[2, 8], [1, 9], [0, 10]]
各要素がリストの場合、その2個目の要素の値を使ってソートする。