Pythonを書いていると、lambda というキーワードを目にすることがあります。
一見するとシンプルですが、「いつ使うべきか分からない」「可読性が下がりそう」と感じる人も多いのではないでしょうか。
lambda式とは何か
lambda 式は 名前を持たない無名関数 を定義するための仕組みです。
基本構文
lambda 引数1, 引数2, ...: 戻り値
通常の関数定義と比較すると、次のようになります。
# 通常の関数
def add(x, y):
return x + y
# lambda式
add = lambda x, y: x + y
ポイントは以下の通りです。
- 1行で完結する
- 処理は1つの式のみ
- return文は書けない(式の結果が自動で返る)
lambda式の代表的な使いどころ
lambda式は「その場限りの簡単な処理」に向いています。
map / filter / sorted と組み合わせる
numbers = [1, 2, 3, 4, 5]
# 各要素を2倍
result = list(map(lambda x: x * 2, numbers))
# 偶数だけ抽出
result = list(filter(lambda x: x % 2 == 0, numbers))
# 特定キーでソート
users = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]
users.sort(key=lambda u: u["age"])
このように、「短く・一時的な処理」を書く場合に非常に相性が良いです。
lambda式を使うメリット
lambda式を使う主な利点は以下です。
- コード量が減り、簡潔に書ける
- 一時的な関数を定義するためにdefを書かずに済む
- 処理の意図がその場で分かりやすい(短い場合)
特にコレクション操作では、読みやすさと記述量のバランスが良くなります。
lambda式を使うべきでないケース
便利なlambda式ですが、万能ではありません。
複雑な処理には不向き
# 悪い例
lambda x: x * 2 if x > 10 else x / 2 if x > 5 else x + 1
このようなコードは可読性が著しく低下します。
再利用する処理
- 複数箇所で使う
- 名前を付けたほうが意図が伝わる
この場合は、素直に def を使うほうが良いです。
def と lambda の使い分け指針
判断に迷ったら、以下を基準にすると実務では失敗しにくくなります。
- 1行・一時的 → lambda
- 複数行・再利用 → def
- 可読性が下がる → def
「短く書ける」よりも「後から読める」ことを優先するのが重要です。
まとめ
Pythonのlambda式は、正しく使えばコードを簡潔にし、可読性も向上します。
一方で、複雑なロジックを無理にlambdaで書くと、保守性が下がる原因にもなります。
「小さく・その場限り」を意識して使い分けることで、lambda式は非常に強力な武器になります。