記事内にはプロモーションが含まれています

Pythonのlambda(無名関数・ラムダ式)とは?わかりやすく解説

Pythonのlambda(無名関数・ラムダ式)とは?わかりやすく解説 プログラミングの疑問解決

Pythonのコードを読んでいると、時折lambdaというキーワードが登場します。
これは「無名関数」または「ラムダ式」と呼ばれるもので、Pythonの機能をより簡潔に、そして強力に使いこなすための便利な構文です。

defで定義する普通の関数と何が違うの?」
「どんな時に使うと便利なのか、いまいちわからない・・・」

この記事では、上記のような疑問を持つ方に向けて、lambda式の基本から、その真価が発揮される具体的な使いどころ、そしてコードの可読性を損なわないための注意点まで、初心者にもわかりやすく解説していきます。

【著者プロフィール&本記事の信頼性】
プロフィール
  • 著者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼 ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
プロフィール詳細はコチラ
当ブログ著者
当ブログ著者
忖度は一切なし!
本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!
【RUNTEQの特徴】
✅受講生からの評判が驚くほど良い
✅学習はハードだが未経験とは思えないほど高いスキルが身に付く
挫折させない万全なサポート体制が用意されている
✅採用面接で担当者に刺さるレベルの高い「ポートフォリオ」を作成できる
✅給付金を使えば実質約13万円という格安料金で受講できる

\ もちろん勧誘行為は一切なし! 相談だけでもOK! /

Pythonの無名関数(lambda式)とは?

lambda式とは、一言で言えば「名前を持たない、一行で書ける小さな関数」のことです。

通常の関数はdefキーワードを使って名前を付けて定義しますが、lambda式はその手間を省き、より手軽に関数を作成できます。

基本的な構文

lambda式の構文は非常にシンプルです。

lambda 引数: 式

:の左側に引数を、右側にその引数を使った式(処理内容)を記述します。この式の評価結果が、関数の戻り値となります。

通常の関数(def)との比較

例として、2つの数値を足し算する簡単な関数を、通常のdeflambdaの両方で書いて比較してみましょう。

まずは、おなじみのdefを使った関数の定義です。

def add(x, y):
  return x + y

result = add(3, 5)
print(result)

実行結果は以下の通りです。

8

次に、これをlambda式で書いてみます。

add_lambda = lambda x, y: x + y

result = add_lambda(3, 5)
print(result)

もちろん、実行結果は同じです。

両者を比較すると、lambda式には以下のような特徴があることがわかります。

  • defや関数名が不要
  • returnを書かなくても、式の評価結果が自動的に返される
  • 処理は一行の「式」しか書けない(複数行の処理や文は書けない)

このように、lambda式は非常にシンプルな処理を、その場ですぐに定義したい場合に適した構文なのです。

lambda式の真価が発揮される「使いどころ」

「わざわざlambdaを使わなくても、defで書けば良いのでは?」と思うかもしれません。

確かにその通りで、先ほどのようにlambda式を変数に代入して使うのは、実はあまり推奨されていません。(理由は後述します)

lambda式の本当の価値は、「他の関数の引数として、小さな関数を渡したい」という場面で最大限に発揮されます。

sorted()のkey引数で、並び替えのルールを指定する

lambda式が最も輝く代表的な例が、リストの並び替えを行うsorted()関数のkey引数です。

key引数には「何をもって並び替えるか」というルールを関数で指定します。

例えば、タプルのリストを、各タプルの2番目の要素(年齢)で昇順に並び替えたい場合を考えます。

# (名前, 年齢)のタプル
user_list = [('Suzuki', 25), ('Tanaka', 20), ('Sato', 30)]

# 各要素の2番目の値(x[1])を基準にソート
sorted_list = sorted(user_list, key=lambda x: x[1])

print(sorted_list)

実行結果は以下の通りです。

[('Tanaka', 20), ('Suzuki', 25), ('Sato', 30)]

key=lambda x: x[1]の部分がポイントです。

sortedはリストの各要素(タプル)を順番にxとしてlambda式に渡し、その戻り値であるx[1](年齢)の値を比較して並び替えています。

この「年齢でソートする」という一度きりのルールのために、わざわざdefで関数を定義するのは少し大げさですよね。
こんな時こそlambda式の出番なのです。

map()で、リストの全要素に同じ処理を適用する

map()関数は、リストなどのイテラブル(反復可能なオブジェクト)の全要素に対して、特定の関数を適用し、その結果を新しいイテラブルとして返します。

この「特定の関数」としてlambda式がよく使われます。

numbers = [1, 2, 3, 4, 5]

# 全ての要素を2乗する
squared_numbers = map(lambda x: x * x, numbers)

# mapオブジェクトはそのままでは中身が見えないのでリストに変換
print(list(squared_numbers))

実行結果は以下の通りです。

[1, 4, 9, 16, 25]

map()lambdaを組み合わせることで、forループを書くよりも簡潔に、リスト全体の変換処理を記述できます。

filter()で、条件に合う要素だけを抽出する

filter()関数は、map()と似ていますが、関数を適用して戻り値がTrueになる要素だけを抽出します。 この判定関数としてlambda式が活躍します。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 偶数だけを抽出する (x % 2 == 0 が True になるものだけ)
even_numbers = filter(lambda x: x % 2 == 0, numbers)

print(list(even_numbers))

実行結果は以下の通りです。

[2, 4, 6, 8, 10]

これもfor文とif文を組み合わせるより、ずっとスマートな書き方と言えるでしょう。

lambda式を使いこなすための注意点

lambda式は強力なツールですが、使い方を誤ると逆にコードを読みにくくしてしまいます。

ここでは、lambda式を扱う上での重要な注意点を解説します。

複雑な処理は書かない

lambda式は、あくまで一行で書けるシンプルな「式」を扱うためのものです。
三項演算子を使えばif-elseの分岐も書けますが、それが複数になったり、処理が複雑になったりする場合は、無理にlambdaで書くべきではありません。

# 悪い例: ぱっと見で何をしているか分かりにくい
complex_lambda = lambda x: 'A' if x > 10 else ('B' if x > 5 else 'C')

このような場合は、素直にdefを使って、可読性の高い通常の関数として定義しましょう。

コードを書く上での大原則は「自分以外の誰かが、後から読んでも理解できること」です。

lambda式を変数に代入するのは避ける

記事の冒頭でadd_lambda = lambda x, y: x + yという例を挙げましたが、これはlambda式の説明のための例であり、実際のコードでこのように書くことは推奨されていません。

なぜなら、

def add(x, y): return x + y

と書くのと比べて、lambdaを使うメリットが何もなく、むしろdefで書いた方が関数名が明確でわかりやすいからです。

また、エラーが発生した際も、defで定義した関数はエラーメッセージにその名前が表示されるため、デバッグがしやすいという利点もあります。

初心者がPythonの無名関数をはじめとしたスキルを効率的に学ぶには

無名関数をはじめとするPythonのスキルを効率的に習得するには、プログラミングスクールの活用が最も近道です。

スクールでスキルを高めることにより、今の仕事に活かしたり、副業として高単価な案件を受注できたりするだけでなく、Pythonエンジニアとして転職することも可能になります。

Pythonエンジニアは需要が非常に高いため、それに比例して年収も高くなる傾向にあります。
「今よりも年収を上げたい」「将来性の高い職種であるエンジニアへ転職したい」といった気持ちが強い場合は、プログラミングスクールでPythonの専門スキルを習得しつつ、ポートフォリオ支援や転職支援を受けてエンジニアへ転職する、という道を目指すのもよいでしょう。

なお、「Pythonに強く、受講生からの評判も良いプログラミングスクール」には、以下のようなところがあります。

その他、以下の記事でもPythonのおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。