Python の lambda(ラムダ)式の使い方を徹底解説【短く書いて賢く使う】

Python を使っていると、lambda という見慣れないキーワードに出会うことがあります。
「無名関数って何?」「普通の def と何が違うの?」と感じた人も多いはずです。

結論から言うと、lambda は「その場で使う小さな関数」を一行で書くための仕組みです。
この記事では、lambda の基本構文から、よく使われる場面、使ってはいけないケースまでを解説します。


lambda とは何か?

lambda は、名前を持たない関数(無名関数) を定義するための構文です。

通常の関数はこう書きます:

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

同じ処理を lambda で書くと:

add = lambda x, y: x + y

基本構文

lambda 引数: 戻り値
  • return は書かない
  • 1 つの式だけを書ける(複数行・if 文・for 文は不可)

つまり lambda は、
👉 「短く・一時的に使う関数」専用の書き方です。


なぜ lambda を使うのか?

1. コードを短くできる

square = lambda x: x * x
print(square(5))   # 25

わざわざ def で関数定義するほどでもない処理を、1 行で書けます。


2. 高階関数(map, filter, sorted など)と相性がいい

lambda が最も活躍するのは、**「関数を引数として渡す場面」**です。


よく使う lambda の例

map() と組み合わせる

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

result = list(map(lambda x: x * 2, numbers))
print(result)  # [2, 4, 6, 8, 10]

👉 各要素に同じ処理を適用したいときに便利。


filter() と組み合わせる

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

result = list(filter(lambda x: x % 2 == 0, numbers))
print(result)  # [2, 4, 6]

👉 条件に合う要素だけを抽出したいときに使います。


sorted() のキー関数として使う

students = [
    {"name": "Taro", "score": 80},
    {"name": "Hanako", "score": 95},
    {"name": "Jiro", "score": 70}
]

sorted_students = sorted(students, key=lambda x: x["score"])
print(sorted_students)

👉 「どの値を基準に並び替えるか」をその場で指定できるのが lambda の強みです。


min() / max() と組み合わせる

prices = {"apple": 120, "banana": 80, "orange": 150}

cheapest = min(prices.items(), key=lambda x: x[1])
print(cheapest)  # ('banana', 80)

👉 「辞書の値で比較したい」などのケースでよく使われます。


lambda で書けること・書けないこと

✔ 書けること

  • 四則演算
  • 条件式(条件演算子)
  • 関数呼び出し
  • 単純な式

例:

max_value = lambda a, b: a if a > b else b
print(max_value(10, 20))  # 20

❌ 書けないこと

  • 複数行の処理
  • for / while / try / with
  • 代入文(x = 10 など)

つまり、lambda は
👉 「ロジックを書く場所」ではなく、「式を書く場所」 です。


lambda と def の使い分け

lambda を使うべき場面

  • 一度しか使わない関数
  • map / filter / sorted / min / max などに渡す処理
  • 短くて意味が明確な処理
sorted(data, key=lambda x: x["price"])

def を使うべき場面

  • 処理が複雑
  • 再利用する
  • 可読性を重視したい
  • デバッグが必要
def get_price(item):
    return item["price"]

sorted(data, key=get_price)

👉 可読性を犠牲にしてまで lambda を使う必要はありません。


よくある誤解

「lambda の方が速い?」

❌ いいえ。
実行速度は def とほぼ同じです。lambda の目的は短く書くことであって、パフォーマンス向上ではありません。


「lambda は上級者向け?」

⭕ 半分正解、半分誤解です。
構文自体はシンプルですが、多用すると可読性が下がるため、適切な場面で使えるかが重要です。


実務でのベストプラクティス

  • 1 行で意味が伝わるなら lambda
  • 3 秒見て理解できないなら def に書き直す
  • ネストした lambda は使わない

悪い例:

lambda x: (lambda y: y * 2)(x)

良い例:

lambda x: x * 2

まとめ

  • lambda「その場で使う小さな関数」 を書くための構文
  • map, filter, sorted, min, max と組み合わせると強力
  • 複雑な処理や再利用する関数は def を使うのが正解