Python programming:無名関数lambda(ラムダ式)とは何なのか?

無名関数と言われるLambda関数とは一体何なのか?これまでもこのlambdaという単語はpythonコードの中で何度か目にしてきているが、その時は特に気にすることなく素通りしていた。しかしながら、ここに来て、このlambdaというものに関心がでてきたので、今日はこのlambdaとかいう関数をこのサイトを参考にして勉強する。

スポンサーリンク

Lambda functions: Anonymous functions

list(map(lambda x: x**2, [ 1, 2, 3, 4 ] ))
[1, 4, 9, 16]

上記のコードは、1〜4のリストの数字をそれぞれxとして、$x^2$している。今度は1〜nまでの二乗を合計するコード。

n = 10
sum(map(lambda x: x**2, range(1,n+1)))
385

sumをlistにすれば、1〜nまでの数字を二乗していくコードになる。

list(map(lambda x: x**2, range(1,n+1)))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

named function(名前付き関数)をdefを使ってわざわざ作らなくても、lambdaを使えばcallableのsmall functionを以下のようにして簡単に作成できる。

f = lambda x, y: x + y
f(5,7)
12

yにデフォルトの値を設定することも可能

f = lambda x, y=8: x + y
f(4)
12

Applications of lambda functions

Lambda関数は、関数が必要でdefを使って定義したくない時に使える。例えば、非線形方程式$x=\sqrt{2.5}$を解きたい場合、

from scipy.optimize import fsolve
import numpy as np

sol, = fsolve(lambda x: 2.5 - np.sqrt(x), 8)
print (sol)
6.25000000000001

引数として関数を取る関数は、lambda関数を使用できる。下の例は、リスト内の数を合計するためにreduce関数で2つの数を足すlambda functionを使用する。

from functools import reduce

reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
10

積分$\int_0^2 x^2 dx$をlambda functionを使って解くことができる。

%precision %e
from scipy.integrate import quad

quad(lambda x: x**2, 0, 2)
(2.666667e+00, 2.960595e-14)

何となくだが、lambda関数の使い方が分かったような気がする。