INDEX
lambdaの概要
無名関数の定義 Python予約語 | ||
lambda 概要 わかりやすく説明 |
||
|
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のコーディングをより効率的にしましょう。