Python の lambda 式の作成
Python の lambda 式の書き方
lambda (ラムダ式, lambda expression) を用いると、匿名関数 (anonymous function) を定義できます。
lambda 引数1, 引数2, ... , 引数n : 引数を使う式
lamdba によって匿名関数オブジェクトが定義できる、ということがどういうことか、def と比較することでみていきましょう。
まず例として、 def を用いて足し算を行う add 関数を定義します。
def add(x, y):
return x + y
print(add(1, 2))
実行結果は次のとおり。
3
次に lambda を用いて匿名関数オブジェクトを定義してそれを呼出します。
f = lambda x, y: x + y
print(f(1, 2))
lambda の後、コロンまでが引数のリストで、コロンの後が lambda の値になります。 関数らしくいえばこのラムダ式は 「x と y を受け取って、x + y を返す」式を表しています。
受け取った引数を足し合わせて戻り値としているので、1 と 2 を受け取ったら戻り値は 3 です。よって、この実行結果は次のとおり。
3
def と lambda の違い
上述のようにdef を使っても lambda を使っても同様に関数オブジェクトを作成して、 それを呼出すことができます。def と lambda の違いは次のとおりです。
- lambda は式
lambda は文 (statement) ではなく式 (expression) です。def は文です。このため、おのずと def とは出現場所が変わってきます。 - ラムダ式のボディ部は単一の式 (expression)
def の場合はボディ部はステートメント・ブロックでしたが、ラムダ式の場合は単一の式がボディ部となります。
式はひとつの値になります。一方、文は手続きを表しています。例えば if 文はひとつの値を表しているわけではなく、 処理の分岐という手続きを記述しています。
こうした違いから lambda を用いれば、次のように異なる関数定義を簡便に記述することが可能になります。
a = [lambda x, y: x + y, lambda x, y: x * y]
for f in a:
print(f(10, 5))
これの実行結果は次のとおりです。
15
50
前者では 5 と 10 の足し算、後者では掛け算が行われた結果が出力されています。(for の使い方については、 ループに関する説明を見てください)