機械学習・ディープラーニングがゼロから学べる大人気『脱ブラ』が無料に!

【Python 入門】lambda (ラムダ式、無名関数)について解説!

こんにちは、機械学習の講師をしている木下です!

今まで Python を使ったコーディングをしている際に、以下のような記載を見たことがありませんか?

lambda i: i + 1

この lambda という謎の文字は一体何なのか、どのようなことを意味するのか悩んでしまった方も多いと思います。

ここでは、そんな lambda (ラムダ式、無名関数)について初学者向けに解説していきます。

注意
本記事では理解を促進するため、一部非推奨な書き方を含みます。

実行環境

そもそもいつ使うのか?

lambda は単体で使うのではなく他の関数と組み合わせて使うことを前提とした関数の定義文です。普段 def を使って定義している関数をより簡潔に記述することができます!

def による関数の定義は以下の記事を御覧ください。
function_basic 【Python 入門】関数の作り方についてやさしく解説!関数を自作できるようになろう!

以下のような関数・メソッドと共に用いることが多いので、これらを見かけたら活用を考えてみてください。

  • sort (sorted)
  • max (min)
  • map
  • filter
  • optuna などの最適化ライブラリ

ただし、慣れないうちは非常に難しく感じる書き方なので、ここで一緒に押さえて活用できるようにしていきましょう!

lambda はリストの内包表記と共通した部分がありますので、そちらもぜひ御覧ください。
【Python 入門】リスト内包表記について解説!

lambda の書き方と簡単な書き換え方法

ここで、以下のような def による関数の記述を lambda で書き換える方法を見ていきましょう。

def による関数の記述
def 関数名(引数1, 引数2, …):
    a = 引数を用いた処理
    return a

このような一般的な関数の定義は、lambda を用いると以下のように一行で書き換えることができます

lambda による関数の記述
lambda 引数1, 引数2, …: 引数を用いた処理

実は return する変数を計算している式を : の後ろに持ってくるだけです!

lambda を使った書き換えの具体例

ここでは 実際に lambda を使って関数を書き換えてみましょう。
サンプルコードは以下の通りです。

def による関数の宣言
def add_def(a):
    a = a + 1
    return a
lambda による関数の宣言
# lambda を変数に代入することは推奨されていません
add_lambda = lambda a: a + 1 
出力結果
# 実行すると 4 が返ってきます
print(f'def: {add_def(3)}')
print(f'lambda: {add_lambda(3)}')

慣れないうちは以下の手順で書いてみると簡単にかけるようになります。

  1. def を使って関数を書いてみる
  2. return する変数を一行で表現する
  3. lambda の : の右側にその一行をもってくる

lambda の活用

先に述べたように lambda は決められた組み合わせで活用されます。例えば次のような sorted 文で用いる理由を考えてみましょう。

sorted 文における活用

sorted 文によるコード
l = ['baseball', 'soccer', 'tennis', 'kickboxing']
l_sorted_first = sorted(l)
print(l_sorted_first)
実行結果
['baseball', 'kickboxing', 'soccer', 'tennis']

このように sorted は文字列などをアルファベット順に並び替えることに用います。それでは、なぜ lambda による記述が必要なのでしょうか

例えば、1 文字目のアルファベット順ではなく、2 文字目のアルファベット順に並び替えたいといった特殊な処理のときに lambda が活きてくるんです!

以下のコードを御覧ください。

lambda を用いた sorted 文
l = ['baseball', 'soccer', 'tennis', 'kickboxing']
# 2 文字目についてアルファベット順に並び替え
l_sorted_second = sorted(l, key=lambda x:x[1])
print(l_sorted_second)
実行結果
# 実行結果
['baseball', 'tennis', 'kickboxing', 'soccer']

複雑に見えますが、ある単語の 2 文字目だけを取り出すための関数が lambda x:x[1] です。この関数を key という引数に取ることで、この関数の返り値に応じた値で並び替えを行うことができます。

このように、少し複雑な処理を関数やメソッドを用いて実行したい場合に lambda が真価を発揮することがあります。ぜひ色々な実例を調べてみてください!

最後に

本記事では、Python の文法である lambda を用いた記述を解説しました。
やはり、非常に難しく感じますが、意外と見かけることが多い表現なので、ぜひこの記事を読んで理解を深めてください。

以下、まとめになります。

  • lambda は def による関数の定義を一行にまとめることができる構文
  • 基本的には他の関数・メソッドなどと組み合わせて用いる
  • def の代わりにそのまま使うことは推奨されていない

もし忘れてしまったら本記事を思い出して再度復習してみてください。

以上、Python 学習している方々のお力添えになれば幸いです!
(本記事はキカガク長期コース卒業生に協力していただき作成しました)

参考リンク

参考 Python 3.9.2 ドキュメント 参考 Chainer チュートリアル

大人気コース「Python & 機械学習入門コース」が無料!

現在 e ラーニングプラットフォーム「キカガク」に無料登録すると、これまで多くの方にご受講いただいた、Python の基礎から機械学習の数学やプログラミングまでを学べる大人気コース「Python & 機械学習入門コース」が無料です。

好評である手書きの数学とハンズオン形式のプログラミングを通じて、初学者でも数学の理論から実装まで一から学習できます。また、動画で丁寧に解説しているため、迷うことなく最後まで継続して学習しやすいです。

Python の基礎から機械学習を学習したい方は、ぜひ教材の1つとしてご利用ください!