Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonのlambda(ラムダ)関数についての解説

【Python入門】lambda(ラムダ)関数とは?その基本ついてわかりやすく解説。メリットや注意点は?

Pythonのlambda(ラムダ)関数とは?その基本について解説

前回まではPython初心者を悩ませるイテレータやジェネレータについて書いてきましたが、今回もPythonの学習を始めたばかりの人を悩ませる壁の1つ、lambda(ラムダ)関数の基本的な解説です。

lambda関数とは?

公式定義

まず公式ドキュメントの用語集では、次のように書かれています。

無名のインライン関数で、関数が呼び出されたときに評価される 1 つの 式 を含みます。ラムダ関数を作る構文は lambda [parameters]: expression です。

Python公式ドキュメント

要点

要点としては、

  • 名前がない無名の関数
  • ブロック(改行あり)を作らない、一行扱い(改行なし)の関数(短く簡易な関数)

という感じですね。

ラムダ式の構文

このラムダ関数を作りだすための式が、ラムダ式と呼ばれるものです。ラムダ式の構文は公式ドキュメントでは次のようになります。

lambda_expr ::=  "lambda" [parameter_list] ":" expression
  • 左辺のlambda_exprは、ラムダ式という意味
  • 右辺の”lambda”は、「lambda」というキーワードを使えという意味
  • [paremeter_list]は、引数の指定
  • ” : ”は、「:(コロン)」を使えという意味
  • expressionは、「式を書け」という意味です。

このラムダ式からラムダ関数が作られます。

このままではよくわかりませんね。さっそく簡単な具体例をみてみましょう。

ラムダ関数の使い方の例

まずは2つの数を足し算する「普通の関数」を作ってみます。名前をadditionとします。

# additionという関数を定義
def addition(x, y):
    return x+y

#addition実行
addition(1, 2)  # 結果:3

これは特に問題ないでしょう。

次に、同じ動作をするラムダ関数を作って、そして実行してみます。

(lambda x, y:x+y)(1, 2)

「(lambda x, y:x+y)」の部分は、defを使っていませんし、特に関数の名前(上でいうとaddition)をつけているわけでもありません。こういった意味でラムダ関数は「無名関数」なのですね。

また、「lambda x, y」の「x, y」が、def~の場合の仮引数の定義に相当しています。

そして改行を含まず1行で記述されています。

「(1, 2)」の部分は実引数を指定してラムダ関数を実行している部分です。ラムダ関数も関数なので、普通の関数のように、「関数(実引数)」という形で実行できます。

それではこのようなラムダ関数を今度は変数に代入してみましょう。additionという変数に代入します。


# ラムダ式を書く。これによりラムダ関数オブジェクトが生成される
addition=lambda x, y:x+y

# できたオブジェクトの型を確認
type(addition)  # 結果:<class 'function'>。functionは「関数」の英語

# 関数を引数を設定して実行
addition(1, 2)  #結果:3

type(addition)のところで型を確認していますが、しっかりと「呼び出し可能型(__call__()メソッドをもつオブジェクト)の1種であるfunciton」となっています。このようにユーザー定義関数オブジェクトとしてaddtionが作られました。

additionは関数オブジェクトであって関数なので、「関数(実引数)」という記述によって実行できます。そして結果として3が表示されます。

まとめ:ラムダ関数を使うメリットと注意点

メリット

今回は2つの数の足し算という「簡単で短い記述で済む処理」で、しかも「1回しか使わない」処理の関数を作りましたが、このような関数ならば、いちいちdefで宣言し、関数に具体的な名前をつけて作成する必要性はあまり高くありません。

関数や変数の名前をどうつけるかは、それはそれで頭を悩ませる問題の1つです。特に長いコードになるとその各所で変数や関数にわかりやすい名前をつけることは至難の技です。名称の統一性を確保することは難しい課題です。

そこで、いちいち具体的な名前をつける必要性が薄いならば、そうしないほうが良いこともあります。

また短い記述で済むため、コードの見た目も少し簡潔なものとなるでしょう。

注意点

なおラムダ式で作成されたラムダ関数は、各種の文やアノテーションを含めることができない(ことに注意してください。for文やif文、return文などは使わないようにしましょう。

テックアカデミーで短期間でプログラミングを身に着けませんか?

プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。

など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。

愛を分かち合いましょう