Pythonのコードを読んでいると、時折lambdaというキーワードが登場します。
これは「無名関数」または「ラムダ式」と呼ばれるもので、Pythonの機能をより簡潔に、そして強力に使いこなすための便利な構文です。
defで定義する普通の関数と何が違うの?」「どんな時に使うと便利なのか、いまいちわからない・・・」
この記事では、上記のような疑問を持つ方に向けて、lambda式の基本から、その真価が発揮される具体的な使いどころ、そしてコードの可読性を損なわないための注意点まで、初心者にもわかりやすく解説していきます。

本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!

✅受講生からの評判が驚くほど良い
✅学習はハードだが未経験とは思えないほど高いスキルが身に付く
✅挫折させない万全なサポート体制が用意されている
✅採用面接で担当者に刺さるレベルの高い「ポートフォリオ」を作成できる
✅給付金を使えば実質約13万円という格安料金で受講できる
\ もちろん勧誘行為は一切なし! 相談だけでもOK! /
Pythonの無名関数(lambda式)とは?
lambda式とは、一言で言えば「名前を持たない、一行で書ける小さな関数」のことです。
通常の関数はdefキーワードを使って名前を付けて定義しますが、lambda式はその手間を省き、より手軽に関数を作成できます。
基本的な構文
lambda式の構文は非常にシンプルです。
lambda 引数: 式
:の左側に引数を、右側にその引数を使った式(処理内容)を記述します。この式の評価結果が、関数の戻り値となります。
通常の関数(def)との比較
例として、2つの数値を足し算する簡単な関数を、通常のdefとlambdaの両方で書いて比較してみましょう。
まずは、おなじみの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に強く、受講生からの評判も良いプログラミングスクール」には、以下のようなところがあります。
- デイトラ
(※格安)
- キカガク
(※専門的)
- Aidemy Premium
(※受講コースが豊富)
その他、以下の記事でもPythonのおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。




