【Python】匿名関数ラムダ式を使う方法

Python

この記事では、Pythonのラムダ式の使い方を解説します。

ラムダ式とは?

  • 名前のない簡単な関数を生成できる
  • 関数オブジェクトを要求する場所ならどこでも使える
  • 単一の式のみ使える

つまり、関数オブジェクトが要求された場合に、定義するまでもない簡単な処理を指定するのに使えます。

ラムダ式は、匿名関数無名関数とも呼ばれます。

ラムダ式の使い方

それではラムダ式の使い方を見ていきましょう!

定義

lambdaキーワードを使って以下のように定義します。

lambda 引数名: 戻り値

引数は複数定義することができます。

lambda 引数名1, 引数名2: 戻り値

サンプル

以下のような関数があったとして、

def func(a, b):
    return a + b

この関数と同じ処理をラムダ式で実装すると、以下のようになります。

lambda a, b: a + b

実際に関数を呼び出して結果を比較してみます。

def func(a, b):
    return a + b

# 関数
print(func(1, 2))
# 3

# ラムダ式
print((lambda a, b: a + b)(1, 2))
# 3

同じ値が出力されました。

高階関数にラムダ式を使う

以下のように、引数に渡された値が0以上ならば何かしらの処理を実行する関数があったとします。

def func(num):
    if num >= 0:
        print('実行')

でもやっぱり状況によって条件を変更したいなと思った時に、関数の参照を引数にとってやることで、呼び出し時に条件を変更することができます。

def func(f, num):
    if f(num):
        print('実行')

# ラムダ式を渡す
func(lambda a: a > 5, 6)

このように、関数の参照を引数として受け取ったり、戻り値として返したりする関数のことを高階関数と呼びます。ラムダ式はよく高階関数で使用されます。

サンプルとして、2つの高階関数とラムダ式を組みわせた使い方を見てみましょう!

イテラブルオブジェクト内の全ての要素に処理を実行する

map関数を使うことで、イテラブルオブジェクト内の全ての要素に処理を実行できます。

書式

map(function, iterable, ...)

第一引数に関数オブジェクト、第二引数にイテラブルオブジェクトを受け取ります。イテラブルオブジェクトは複数指定することもできます。

サンプル

以下のコードは、渡されたリストの要素を10倍したリストを返します。

nums = [1, 2, 3]

print(list(map(lambda num: num * 10, nums)))
# [10, 20, 30]

イテラブルオブジェクトを複数渡す

追加でイテラブルオブジェクトを渡した場合は、第一引数の関数オブジェクトの引数を、渡したイテラブルオブジェクトの数だけ取る必要があります。

以下のコードは、リストを2つ渡し、同じインデックスの要素同士を足しています。

a = [1, 2, 3]
b = [4, 5, 6]

print(list(map(lambda a, b: a + b, a, b)))
# [5, 7, 9]

イテラブルオブジェクト内の特定の要素のみを取得する

filter関数を使うことで、渡されたイテラブルオブジェクトの要素に関数オブジェクトを適用し、Trueを返した要素のみを取り出します。

書式

filter(function, iterable)

第一引数に関数オブジェクト、第二引数にイテラブルオブジェクトを受け取ります。

サンプル

以下のコードでは、偶数の値のみ抜き出してみます。

nums = [1, 2, 3, 4, 5, 6]

print(list(filter(lambda num: num % 2 == 0, nums)))
# [2, 4, 6]

まとめ

この記事では、Pythonのラムダ式について解説しました。

ラムダ式を使うことによって、一箇所しか使わないような無駄な関数を定義しなくて済みます。また、高階関数と組み合わせることで非常に便利な処理を実装することができます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

タイトルとURLをコピーしました