Python 速習チュートリアル

Python のラムダ関数 (Lambda)

1. ラムダ関数とは

ラムダ関数(Lambda Function)は、名前を持たない小さな匿名関数です。
通常の def キーワードを使用した関数定義とは異なり、1行のコードで簡潔に記述できるのが特徴です。

2. 構文 (Syntax)

ラムダ関数の基本的な書き方は以下の通りです。

lambda 引数 : 式

この構文には、以下の重要なルールがあります。

  • 引数(Arguments)はいくつでも指定できます。
  • 式(Expression)は一つしか記述できず、その結果が実行時に自動的に返されます。

2.1 基本的なコード例

引数 a に 10 を加算して結果を返すラムダ関数の例です。

x = lambda a : a + 10
# 5 + 10 の結果が出力される
print(x(5))

ラムダ関数は複数の引数を取ることができます。

# 引数 a と b を掛け合わせるラムダ関数
x = lambda a, b : a * b
print(x(5, 6))

3 つの引数を合計する例です。

# 引数 a, b, c を合計するラムダ関数
x = lambda a, b, c : a + b + c
print(x(5, 6, 2))

3. なぜラムダ関数を使うのか?

ラムダ関数の真価は、別の関数の中で匿名関数として使用されたときに発揮されます。

例えば、1つの引数を受け取り、その引数に未知の数値を掛ける関数を定義したとします。

def myfunc(n):
  return lambda a : a * n

この定義をベースに、特定の用途に特化した関数を動的に生成できます。

3.1 関数生成器としての活用

上記の myfunc を利用して、渡された数値を常に2倍にする関数(doubler)を生成する例です。

def myfunc(n):
  return lambda a : a * n

# 常に2倍にする関数オブジェクトを作成
mydoubler = myfunc(2)

print(mydoubler(11))

同様の定義から、数値を3倍にする関数(tripler)を簡単に作成することも可能です。

def myfunc(n):
  return lambda a : a * n

# 常に3倍にする関数オブジェクトを作成
mytripler = myfunc(3)

print(mytripler(11))

3.2 柔軟な使い分け

同じ関数定義(テンプレート)から、用途に応じた異なる振る舞いを持つ関数を同時に使い分けることができます。

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11)) # 22 を出力
print(mytripler(11)) # 33 を出力

ラムダ関数は、短期間だけ必要な使い捨ての関数を定義する場合や、filter()map() といった高階関数の引数としてロジックを渡す際に非常に強力なツールとなります。