関数

【Python】lambda(ラムダ式、無名関数)の使い方

【Python】lambda(ラムダ式、無名関数)の使い方

Pythonのlambdaの使い方の基本について解説します。lambdaは、ラムダ式、無名関数とも呼ばれます。

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

Pythonのlambdaは、名前のない関数を簡単に作成するための構文です。名前がないため無名関数と呼ばれ、式として使えるためラムダ式とも呼ばれます。

lambdaは、関数を第一級オブジェクトとして扱う関数型プログラミングのパラダイムに基づいており、Pythonはこの考え方を取り入れています。第一級オブジェクトとは、変数に代入したり、関数の引数や戻り値として使えるものです。

lambdaを使うメリットには以下があります。

  • 小さな関数をdefで宣言する必要がありません。
  • 関数名の衝突を防げます。
  • 1行で記述ができ、コードがシンプルになります。
  • 高階関数の引数として使用できます。

この記事では、lambdaの使い方の基本を紹介していきます。

lambdaの使い方

lambdaは、以下のように定義して使用します。

lambda(ラムダ式、無名関数)の定義方法
lambda 引数1, 引数2, … : 返却値の計算式

lambdaの後に受け取る引数を列挙し、:の後ろに返却値の計算式を記述します。例えば、lambda x, y: x + yとすると、xyを足した結果を返します。

基本的な使用方法

以下の簡単な使用例で、lambdaの使い方を確認しましょう。

# lambda function
func = lambda val1, val2: val1 * 2 + val2 * 2

print(type(func))
print(func(1, 2))
print(func(3, 4))
【実行結果】
<class 'function'>
6
14

上記のlambdaは、val1val2をそれぞれ2倍して足した値を返却する関数です。

lambdaの返却値のfuncは、<class 'function'>となっており、functionクラスのオブジェクトです。このようにPythonでは、関数も一つのオブジェクトとして扱うことができます。

functionオブジェクトであるfuncは「func(1, 2)」のように()で引数を受け取ることで、関数を実行した値を返却することができます。

lambdaを使用するメリット

lambdaの使い方を紹介しましたが、defで定義しても同じと思うかもしれません。lambdaのメリットの一つは小さな関数をシンプルに、その場で作成できるという点が挙げられます。

以下の例で見てみましょう。

def sum_func_value(val_list1, val_list2, func):
    ret = []
    for v1, v2 in zip(val_list1, val_list2):
        ret.append(func(v1, v2))
    return ret


def main():
    l1 = [1, 2, 3, 4, 5]
    l2 = [6, 7, 8, 9, 10]

    ret_list1 = sum_func_value(l1, l2, lambda val1, val2: val1 + val2)
    print(f'ret_list1 = {ret_list1}')

    ret_list2 = sum_func_value(l1, l2, lambda val1, val2: 2 * val1 + 2 * val2)
    print(f'ret_list2 = {ret_list2}')

    ret_list3 = sum_func_value(l1, l2, lambda val1, val2: 3 * val1 + 3 * val2)
    print(f'ret_list3 = {ret_list3}')


if __name__ == '__main__':
    main()
【実行結果】
ret_list1 = [7, 9, 11, 13, 15]
ret_list2 = [14, 18, 22, 26, 30]
ret_list3 = [21, 27, 33, 39, 45]

上記のsum_func_value関数は、受け取った2つのリストの各要素に対して、funcで指定された関数を適用したリストを返却する関数です。

呼び出し時には、lambdaによってリストの各要素に対してどのような計算をさせるのかを定義し、関数として渡しています。もし、この関数をdefで定義すると考えると似たような関数をたくさん定義し、それぞれに関数名をつける必要があり大変です。

このように小さな関数をその場で定義して使用する場合には、lambdaは非常に有用です。なお、sum_func_value関数のように引数に関数を受け取る関数は、高階関数と呼ばれます。

リストのソート条件をlambdaで指定する

lambdaのよくある使用例として、リストのソート条件をlambaで指定するといったものがあります。lambdasortsortedkey引数に指定して、カスタムのソート条件を指定することができます。

具体的には「リストのソート方法」内で紹介しているので参考にしてください。

まとめ

Pythonのlambdaの使い方の基本について解説しました。

lambdaは、名前のない関数を簡単に作成するための構文です。名前がないため無名関数と呼ばれ、式として使えるためラムダ式とも呼ばれます。

lambdaは、小さな関数を宣言することなく使用でき、コードをシンプルに記述できるメリットがあります。また、高階関数の引数として使用するなど非常に便利な場面が多いです。ぜひ、使い方を覚えて使いこなせるようになってもらえたらと思います。