lambdaとは「無名関数」とも呼ばれています。名前の通り、「関数なのに名前がない関数」です。
通常プログラミングにおける「関数」というと名前をつけるのが普通ですよね?下の例をみてください。
1 2 3 |
def printStr print("Hello World\n") end |
と普通は上記のように関数には名前をつけることで、いつでもどこでも関数名を宣言することでその関数の処理を行えるわけです。
しかし、全部の関数に名前が必要でしょうか?例えば一回しか使わない(ある特定の場所でしか使わない)処理があるとしましょう。そんな時に関数として定義しなくても、その場だけで使える関数が「lambda(無名関数)」というわけです。
全体としてはそんなに重要ではないけど、これがあればこの瞬間だけものすごく助かるというものです。オーダーメイドのスーツを作っても自分以外の人にとっては無価値ですが、自分からしたらものすごく大事ですよね。そんなイメージです。
文章だけでは使い方がわからないと思うので簡単な例を示します。
1 2 |
num = (lambda x: x**2)(3) print (num) # 9 |
これを通常の関数でかくと
1 2 3 4 |
def num(x): return x**2 print(num(3)) |
となります。行数も減っていますね。
上の例からもわかる通りlambdaの使い方は{lambda 引数:返り値}という形になります。
***応用例***
これまでの説明でも「lambda」の素晴らしさはわかっていただけたかと思いますが、「lambda」の真髄は「他の関数との組み合わせ」で最大の効果を発揮することです。
map関数と組み合わせた例をみましょう。
1 2 3 4 5 6 |
# 引数に5をかけるfive()の定義 def five(x): return x * 5 # map()でリストの各要素にfive()を使用する print (list(map(five, [10,100,1000]))) # [50, 500, 5000] |
関数を定義した後に、改めてmap関数内で上で定義した関数を宣言していますね。
これをlambda(無名関数)を用いると…
1 |
print (list(map(lambda x:x * 5, [10,100,1000]))) # [50, 500, 5000] |
となります。map関数はmap(関数,[…, …, …])という形式をとり、第1引数で指定した関数の処理を第2引数で指定したリストの各要素に対して関数の処理を実行します。なので得られる結果はlist型であることに注意してください。
参考文献はこちらです。
スポンサーリンク