Python

【Python】ラムダ式の使い方【匿名関数】

この記事では、Pythonのラムダ式の使い方を解説します。ラムダ式を使うことでその場限りでしか使わないような簡単な関数を1行で表現することができます。関数オブジェクトが要求される箇所になら使用可能なので、よく高階関数と組み合わせて使用されます。

ラムダ式とは?

ラムダ式とは、一度しか使わないような単純な処理を関数を使わずに定義できる機能で、関数オブジェクトを要求する箇所に指定することができます。

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

ラムダ式は、「匿名関数」や「無名関数」とも呼ばれています。

ラムダ式の使い方

ラムダ式は、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()関数を呼び出す際にラムダ式を使うことで無駄な関数を定義しなくて済む。

func(lambda a: a > 5, 6)

高階関数とラムダ式はよく組み合わせて使用されます。サンプルとして2つの高階関数とラムダ式を組み合わせた使い方を見てみましょう!

map関数 + ラムダ式

map()関数は渡されたイテラブルオブジェクトの全ての要素に任意の関数を実行できます。

map(function, iterable, ...)

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

サンプル

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

nums = [1, 2, 3]

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

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

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

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

filter関数 + ラムダ式

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

filter(function, iterable)

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

サンプル

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

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

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

ラムダと関数を組み合わせるとより強力。以下のコードはリストに格納されたint型の要素のみを抜き出している。

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

print(list(filter(lambda val: isinstance(val, int), nums)))

実行結果

[1, 2, 4, 6]

まとめ

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

ラムダ式を使うと複数回使わない単純な処理の関数を定義しなくて済みます。また、高階関数と組み合わせることで非常に便利な処理を実装することができます。

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』