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 を使うのが正解
