Pythonのlambdaによる無名関数の定義と使い方をわかりやすく解説

スポンサーリンク
スポンサーリンク

lambdaの概要

無名関数の定義 Python予約語

lambda

概要 lambda は、関数名を付けずに一行で定義できる無名関数を作成するためのキーワードです。通常の def を使った関数定義よりもコンパクトに記述できます。

わかりやすく説明 lambda は「簡単な計算や処理を、関数を定義せずにその場で実行する」ために使います。例えば、「数値を2倍にする関数」を一行で書くことができます。

  • lambda を使うと、短い処理を簡潔に記述できます。
  • 関数名を付ける必要がなく、一度きりの処理に適しています。
  • 主に map(), filter(), sorted() などの高階関数と組み合わせて使われます。

lambdaの基本的な使い方

以下の例では、数値を2倍にする lambda 関数を定義して使用しています。

# lambda を使った無名関数
double = lambda x: x * 2

print(double(5))  # 10
  • lambda x: x * 2 で「x を 2 倍する無名関数」を定義。
  • この関数を double に代入し、通常の関数のように使用できます。

引数を2つ持つlambda関数

複数の引数を持つ lambda 関数も定義できます。

# 2つの引数を取る lambda 関数
add = lambda a, b: a + b

print(add(3, 7))  # 10
  • lambda a, b: a + b で2つの引数を受け取り、加算する関数を定義。

lambdaをsorted()のキー関数として使う

リストを特定の基準でソートする際、lambda を使うと簡潔に記述できます。

# lambda を sorted() のキー関数として使用
points = [(2, 3), (1, 5), (4, 2)]

sorted_points = sorted(points, key=lambda p: p[1])  # y座標でソート
print(sorted_points)  # [(4, 2), (2, 3), (1, 5)]
  • 各要素の2番目(y座標)を基準にソート。
  • lambda p: p[1] により、各タプルの2番目の要素を比較。

lambdaをmap()で使う

map() を使うと、リストの各要素に対して lambda 関数を適用できます。

# map() と lambda の組み合わせ
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))

print(squared)  # [1, 4, 9, 16, 25]
  • lambda x: x ** 2 により、各要素を2乗。
  • map() を使うことで、ループを省略し、リスト全体に処理を適用。

lambdaをfilter()で使う

filter() を使うと、条件に合う要素のみを抽出できます。

# filter() と lambda の組み合わせ
numbers = [10, 25, 30, 45, 50]
filtered = list(filter(lambda x: x % 2 == 0, numbers))

print(filtered)  # [10, 30, 50]
  • 偶数のみを抽出する lambda x: x % 2 == 0 を使用。

lambdaの注意点

  • 複雑な処理には不向き: 短い処理を簡潔に書くためのものであり、複雑な処理には def を使うべきです。
  • 可読性が低下する可能性: 過度に使うと、コードが読みにくくなることがあります。
  • デバッグが難しい: 名前を持たない関数のため、エラーメッセージがわかりにくいことがあります。

lambdaのよくある質問

Q: lambda は通常の関数 def より優れていますか?
A: 一行で簡潔に記述できる点では便利ですが、複雑な処理には def を使う方が適切です。
Q: lambda を使うべき場面は?
A: map(), filter(), sorted() などの高階関数で短い処理を記述する場合に便利です。
Q: lambda 関数はネスト(入れ子)できますか?
A: はい、できますが、可読性が著しく低下するため推奨されません。

まとめ

lambda は、一度きりの簡単な処理を関数として定義するためのキーワードです。

  • 関数名を持たず、短い処理を簡潔に記述できます。
  • map(), filter(), sorted() などの高階関数と組み合わせると便利です。
  • 可読性を考慮し、適切な場面で使用するのが重要です。

適切に lambda を活用し、Pythonのコーディングをより効率的にしましょう。