Pythonのlambda
の使い方の基本について解説します。lambda
は、ラムダ式、無名関数とも呼ばれます。
Contents
lambda(ラムダ式、無名関数)
Pythonのlambda
は、名前のない関数を簡単に作成するための構文です。名前がないため無名関数と呼ばれ、式として使えるためラムダ式とも呼ばれます。
lambda
は、関数を第一級オブジェクトとして扱う関数型プログラミングのパラダイムに基づいており、Pythonはこの考え方を取り入れています。第一級オブジェクトとは、変数に代入したり、関数の引数や戻り値として使えるものです。
lambda
を使うメリットには以下があります。
- 小さな関数を
def
で宣言する必要がありません。 - 関数名の衝突を防げます。
- 1行で記述ができ、コードがシンプルになります。
- 高階関数の引数として使用できます。
この記事では、lambda
の使い方の基本を紹介していきます。
lambdaの使い方
lambda
は、以下のように定義して使用します。
lambda
(ラムダ式、無名関数)の定義方法lambda 引数1, 引数2, … : 返却値の計算式
lambda
の後に受け取る引数を列挙し、:
の後ろに返却値の計算式を記述します。例えば、lambda x, y: x + y
とすると、x
とy
を足した結果を返します。
基本的な使用方法
以下の簡単な使用例で、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
は、val1
とval2
をそれぞれ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
で指定するといったものがあります。lambda
をsort
やsorted
のkey
引数に指定して、カスタムのソート条件を指定することができます。
具体的には「リストのソート方法」内で紹介しているので参考にしてください。
まとめ
Pythonのlambda
の使い方の基本について解説しました。
lambda
は、名前のない関数を簡単に作成するための構文です。名前がないため無名関数と呼ばれ、式として使えるためラムダ式とも呼ばれます。
lambda
は、小さな関数を宣言することなく使用でき、コードをシンプルに記述できるメリットがあります。また、高階関数の引数として使用するなど非常に便利な場面が多いです。ぜひ、使い方を覚えて使いこなせるようになってもらえたらと思います。
上記で紹介しているソースコードはgithubにて公開しています。参考にしていただければと思います。