こんにちは。今日はPythonのLambda関数について調べてみようと思います。私はデータ分析や機械学習・統計モデリングをするようになってPythonを学びはじめたのですが、Kaggleなどのコンペで他の人のコードを見ていると、このLambda式を使っているケースが多く、気になってきた次第だったのであります。
自分もLambdaをさらっと使いこなせるようになりたい・・・
それでは参ります!
Contents
Lambda式とは?
無名関数という、名前を定義する必要のない小さな関数を作るための機能になります。
ほう。定義はわかったけれど、これを使うと何が嬉しいの?
この疑問については後半で実例で解説していきます。
Lambda式の書き方
lambda [引数]:[処理]
ものは試し、早速コードを書いてみる。
以下は、通常のPythonの関数。足し算をするだけの関数である。
def add(a,b):
return a+b
c = add(2,1)
print(c)
#3
これをLambda式を使うと、こう書けるらしい。
add = lambda a,b: a+b
c = add(1,2)
print(c)
#3
なるほど、確かにdefを使った関数と同じことがこの一行でもできるようである。
ただ、これだと、わざわざLambda式をメリットがよくわからないので、Defとの違いは何なのか?Lambda式の長所は何なのかを調べてみました。
Lambda式とDefの違い
色々なWebサイトにも解説されていますが、DefはPython上「文」(Statement)として扱われるのに対して、Lambda式は「式」(Expression)として扱われます。
つまり、文の場合は式中で使うことができないですが、式は式中で使うことができるということです。つまり、Map関数やSort関数などの中で処理を記述するときに、威力を発揮するということです。
具体的に、Lambda式が威力を発揮するケースをみていきたいと思います。
Lambda式が威力を発揮するケース
Map関数と合わせて使う
1つ目は、Map関数の中で使うケースです。PythonのMap関数は、リストやタプルの全ての値に対して、同じ演算を適用するために使われるもので、以下のような形式で記述します。
Map(引数, イテレータ)
例えば、0から9までの数に、2乗して1を足す処理をかけたいとします。
defで定義する関数を使うと、以下のようにかけます。
def calc(x):
return x*x+1
num_list = [0,1,2,3,4,5,6,7,8,9]
list2 = map(calc, num_list)
print(list(list2))
#[1, 2, 5, 10, 17, 26, 37, 50, 65, 82]
これを、Lambda式を使うと、以下のように1行で済みます。
num_list = [0,1,2,3,4,5,6,7,8,9]
list2 = map(lambda x:x*x+1, num_list)
print(list(list2))
うん、これは確かにdef定義する必要がなく楽だ。Map関数と相性が良いことは分かった!
Sort関数と合わせて使う
お次はSort関数。
コメントを残す