PythonのLambda式がよく分かりません。
簡単に言うと、無名の関数だ。コード付きで解説しよう。
✔️ 本記事のテーマ
PythonのLambda式について
✔️ 読者さんへの前置きメッセージ
本記事は「Pythonのlambda」について書いています。
この記事を読むことで、
「Lambdaについて や PythonのLambdaの書き方」を理解できます。
Pythonを使っていると、Lambdaは避けることができません。
Lambdaを使うことで、
シンプルなコードでより多くの処理を記述することが可能になるでしょう。
PythonのLambdaはmap関数やfilter関数などと併せて使われることが多いです。
そこでこの記事では、
実際にmap関数やfilter関数と組み合わせた場合のコードも解説します。
ぜひ、この記事で一人でも多くの方がLambdaへの苦手意識を無くされると幸いです。
それでは、PythonのLambdaについて解説していきましょう。
PythonのLambda式とは?
Lambda(式)とは、無名関数とも呼ばれるPythonの処理定義です。
通常、Pythonでは関数として処理を定義する際は、以下のようにdefを使って定義します。
def sample_func(x):
square = x * x
return square
上の例では、
引数の二乗を計算してreturnするsample_func()という関数を定義しています。
ところが、Pythonでは関数として個別の名前をつけずに、処理を定義することもできます。
lambda x: x * x
これがLambdaです。
Lambdaを使ってコードを書くことで、
関数を作ることなく処理を定義することができます。
ただ、Lmabdaには書き方と使い方にルールがあります。
このルールが分かっていないと、少し理解が難しい考え方かもしれません。
次から、Lambdaの書き方と使い方を順番に解説していきましょう。
PythonのLambda式の書き方
Lambdaの書き方は以下の通りです。
lambda 引数: 処理内容
このように、Lambdaは書き方自体はそれほど難しくないです。
引数と処理内容(= 戻り値)を定義するだけです。
少し特殊なのはLambdaでは、処理内容がそのまま戻り値となります。
これは後で説明するLambaの使い方によるものです。
書き方のルール自体は内包表記に似てるので、内包表記をイメージすればOKです。
なお、内包表記については「Pythonの内包表記とは【サンプルコードで解説】」の記事で解説しています。Lambdaの考え方が難しいと感じたら、まず内包表記について理解するとスムーズかもしれません。
次は、このLambdaの使い方について解説していきましょう。
PythonのLambdaの使い方
Pythonにおいて、Lambdaは単体で使われることはまずないです。
( PEP8がそのような使い方を非推奨としています)
基本的に、map関数かfilter関数とセットで使われることが多いです。
使い方としては、どちらの場合も「リストに対して何らかの処理をかける」ときにLambdaが使われます。
この点も内包表記と似ていますね。
Lambdaの使いどころとしては、
「一度きり & それほど複雑ではない」処理の定義として使われます。
その性質上、何度も呼び出したり、複雑な処理を行うときは、
Lambdaではなく関数して定義した方が良いでしょう。
それでは、Map関数、filter関数とLambdaの組み合わせについて詳しく解説しましょう。
Lambdaとmap関数(Python)の組み合わせ
map関数は、リストの各要素に対して関数を適用する組み込み関数です。
そして、「関数を適用する」部分でLambdaが使われます。
コードで説明しましょう。
before_list = [1, 2, 3, 4, 5]
after_list = list(map(lambda x: x*x, before_list))
print(after_list)
# [1, 4, 9, 16, 25]
このようにLambdaとmap関数を使うことで、リストの各要素に対して同じ処理を行っています。
今回の例では「before_list」の各要素に対して、二乗を計算するLambdaをかけています。
これは以下のコードと同じことを行っています。
before_list = [1, 2, 3, 4, 5]
def square(x)
return x*x
after_list = []
for num in before_list:
after_list.append(square(num))
print(after_list)
# [1, 4, 9, 16, 25]
いかにLambdaとmap関数の組み合わせがすっきりとしたコードを実現するかが分かると思います。
また、Lambdaとmap関数を使うことでオブジェクト指向に沿って書かれたプログラムであれば、「対象のオブジェクトのプロパティを取り出す」なんてことが簡潔なコードでできるはずです。
なお、Pythonプログラミングでのオブジェクト指向については
「Pythonでオブジェクト指向を解説する」の記事で詳しく解説しています。
Lambdaとfilter関数(Python)の組み合わせ
Filter関数は、リスト(厳密にはイテレーター)からTrue要素のみ抽出する組み込み関数です。
そして、「Trueと判断する」部分でLambdaが使われます。
コードで説明しましょう。
before_list = [1, 2, 3, 4, 5]
after_list = list(filter(lambda x: x%2 == 0, before_list))
print(after_list)
# [2, 4]
このように、Lambdaとfilter関数を使うことで、リストのTrue要素のみ抽出しています。
今回の例では「before_list」の各要素に対して、偶数かどうか(2で割り切れるか)を判定するLambdaをかけています。その判定条件がTrueの場合のみfilter関数で要素を抽出しています。
これは以下と同じことを行っています。
before_list = [1, 2, 3, 4, 5]
after_list = []
for num in before_list:
if num%2 == 0:
after_list.append(num)
print(after_list)
# [2, 4]
PythonでLambda式を使うメリット
ここまで、Lambdaの書き方と使い方について説明してきました。
では、Lambdaを使って処理を定義することにはどのようなメリットがあるのでしょうか?
Lambdaを使うメリットは以下の通りです。
- コードがシンプルになる
- 処理速度が向上する
順番に詳しく解説していきましょう。
コードがシンプルになる
ここまででも説明してきた通り、
Lambdaを使って処理を記述することで、かなりすっきりとしたコードになります。
また、Lambdaを使うと、
処理定義がLambdaを使っている箇所に書かれるので読みやすいコードになります。
このように、
Lambdaを使うことでコードの可読性が上がるというのがメリットの一つです。
処理速度が向上する
Lambdaを使うことで処理速度が向上します。
Pythonはfor文やwhile文などのループ処理が他の言語と比較して遅いです。
そのため、for文でループを回すところを、
map関数やfilter関数と組み合わせたLambdaを使うことで処理速度が向上します。
少ないループだとあまり実感することがないですが、
非常に要素数の多いリストに対して、処理をかけるときはその処理時間に差が出てきます。
このように、Lambdaを使うことでプログラムの性能自体を上げることができます。
普段のプログラミングではそこまで処理速度を意識することもないかもしれません。
ただ、Pythonで機械学習や画像処理などの重い処理を実施する時には、
少しでも処理速度を上げたくなるはずです。
そのような時にLambdaは威力を発揮します。
なお、Pythonでの画像処理を行う方法については
「OpenCVで画像処理をする」の記事で解説しています。
また、Pythonで機械学習を実施する方法については
「機械学習で最も簡単な分類をしてみる【Python】」の記事で解説しています。
どちらの記事もコピペで動くサンプルコードを用いて解説しているので参考にしてみて下さい。
Lambda式やPythonについてもっとスキルをつけるなら
今回はPythonのLambdaについて解説しました。
Lambdaを活用することで、
シンプルかつ強力というPythonの良さを最大限活かすことができます。
Pythonをマスターすると様々なことがプログラムでできるようになります。
Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。
この書籍はPythonについてかなり深く、そして丁寧に書かれています。
Python の基本文法だけでなく、
いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。
Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント