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(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]

まとめ

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

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

【おすすめ】Python参考書