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

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

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

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

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

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

【本記事の信頼性】

  • 執筆者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
忖度一切なし!
受講生から評判の良いプログラミングスクール
スクール
特徴
受講料金
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。
657,000円
(最大約53万円の給付金が適用される)
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。
498,000円
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。
129,800円~
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。
完全無料
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。
96~132万円

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の無名関数lambda式について、その基本から実践的な使い方、注意点までを解説しました。

なお、Pythonを体系的に学んだり、Pythonのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。

細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。

Follow me!

PAGE TOP