【Python】lambdaとは?使い方や用途について:ラムダ式、無名関数

2022.05.27 /

【Python】lambdaとは?使い方や用途について:ラムダ式、無名関数

本記事ではPythonで使用されるlambdaラムダ式無名関数)について解説していきます。

Pythonを勉強していると次のようなコードを目にすることがあると思います。

lambda k: k + 1

これはlambda式(ラムダ式)や無名関数と呼ばれる構文です。シンプルに関数を表現できる仕組みで便利なのですが、あまり参考書などでは詳しく解説されていません。

そこで本記事ではlambdaの意味や使い方、用途などを詳しく解説していきます。

lambda式(ラムダ式、無名関数)

lambda式とは

lambda式(ラムダ式)とは関数を定義せず、関数を一行の式として表現する仕組みです。
つまり関数に名前を付けずシンプルに表現するための仕組みです。

Pythonで関数を定義するには以下のようにdef文を使います。

def func():
    ここに処理を記入する

関数の定義方法はdef文を使用する方法と、lambda式を利用する方法の2つがあるということです。

その場限りでしか利用しない関数(def文)を作る(名前を付ける)ことはよくありません。基本的にプログラミングにおいて、グローバルスコープでの名前は少なくするのが鉄則です。

そこでlambda式で表現できる使い捨て関数はlambda式で記入し、できるだけ関数を定義しないでプログラムを記述することが望ましいです。

lambda式で表した関数は名前がないため無名関数とも呼ばれます。

注意

ラムダ式は1行の式で関数を表すものなので、複数行の式を表現することはできません。シンプルな1行の式にしかラムダ式は使えないので注意してください。

lambda式の作成

lambda式は以下の構文で表現します。

構文

lambda 引数, … : 返り値となる式

例として以下のdef文で定義した関数をlambda式に変更してみましょう。

def twice(number):
    return number * 2

上記の関数をlambda式で表すと次のようになります。

lambda number: number * 2

引数が複数ある場合はカンマで引数を区切ります。Lambdaで記述する「返り値となる式」で結果が返されるため、def文のようにreturn文は利用しません。

lambda式の利用方法

変数に代入

ラムダ式は変数に代入して使用することができます。このようにすることでその変数が関数の名前となり、def文で定義した関数と同じように呼び出すことができます。

cal = lambda number: number * 2
print(cal(2))
# 4

このようにlambda式を使うと、名前を関数に付けているためdef文と変わらないです。そのためこのようにlambda式を使うことは基本ないです。

条件分岐をラムダ式で表現する

1行の式しか表現できないラムダ式でも条件分岐を使うことは可能です。

math = lambda result: '合格' if result >= 80 else '不合格'
print(math(80))
# 合格

高階関数の引数としての利用

ラムダ式は高階関数の引数として使用することが多いです。高階関数の引数にラムダ式を使うことで、コードが格段に読みやすくなります。

IT用語の確認

高階関数とは、関数を引数として使用する関数のことです。

ここでは例として組み込み関数filterの引数にラムダ式を利用してみます。

構文

filter(function, iterable)

filterは第二引数に指定したリストから要素を取り出し、第一引数に指定した関数に要素を渡します。そして関数の結果に従ってTrueまたはFlaseを判定し、Trueの要素だけを抽出できます。

ここでは5文字以上の要素を取り出すfilterを作成してみます。まずdef文で表すと次のようになります。

def search(i):
    return len(i) >= 5
list(filter(search, ['HTML', 'CSS', 'Python', 'JavaScript', 'Django', 'Java']))
# 出力:['Python', 'JavaScript', 'Django']

filterの返り値はfilterオブジェクトのため、list関数でリスト化しています。

では次にラムダ式を使って表すと次のようになります。

list(filter(lambda i: len(i) >= 5, ['HTML', 'CSS', 'Python', 'JavaScript', 'Django', 'Java']))
# 出力:['Python', 'JavaScript', 'Django']

このようにラムダ式を利用することでシンプルに、かつわかりやすくコードを記述できます。

以下の関数やメソッドはラムダ式を利用することが多いです。

  • sorted()
  • map()
  • filter()
  • max()

まとめ

本記事「【Python】lambdaとは?使い方や用途について:ラムダ式、無名関数」はいかがでしたか。

以下に本記事で重要なことをまとめます。

まとめ
  • 関数の定義にはdef文を使用する方法と、lambda式を利用する方法の2つある
  • lambda式は関数に名前を付けずシンプルに表現するための仕組み
  • def文ではなくlambda式を使うことでグローバルスコープでの名前を少なくできる
  • lambda式は主に高階関数で利用する

ぜひlambda式を利用して、シンプルな読みやすいコードを記述してください。