Pythonの匿名関数(lambda)と通常の関数の違いを比較!使い分けガイド
生徒
「Pythonでlambdaっていう書き方を見たんですけど、普通の関数と何が違うんですか?」
先生
「lambdaは匿名関数と呼ばれていて、その場で簡単に関数を作る方法なんです。通常の関数と違って名前を付けなくても使えます。」
生徒
「じゃあ、普通のdefで作る関数はいらないんですか?」
先生
「いえ、状況によって使い分けが大事です。今からlambdaと通常の関数の違いと使いどころを詳しく見ていきましょう。」
1. 匿名関数(lambda:ラムダ式)とは?
匿名関数とは、その名の通り「名前を付けずに定義できる関数」のことです。Pythonではlambda(ラムダ)というキーワードを使って記述するため、一般的に「ラムダ式」とも呼ばれます。
プログラミング初心者の方にとって、関数を作るにはdefを使って名前を決めて……という手順が当たり前に感じるかもしれません。しかし、lambdaを使えば、わざわざ名前を付けるほどでもない「ちょっとした計算」を、その場ですぐに実行できます。
基本的な書き方のルールは以下の通りです。
- lambda 引数: 処理内容(戻り値)
例えば、「受け取った数に10を足す」という非常にシンプルな処理をlambdaで書くと、以下のようになります。変数plus_tenに代入することで、後から呼び出すことも可能です。
# lambdaを使って「10を足す」関数を作成
plus_ten = lambda x: x + 10
# 実行して結果を表示
print(plus_ten(5)) # 出力: 15
このように、lambdaは「1行で完結する」「使い捨ての処理」をスマートに記述するのに非常に向いています。コードが短くなるだけでなく、直感的に何をしているかが分かりやすくなるというメリットがあります。
2. 通常の関数(def)との違い
通常の関数はdefキーワードで定義し、複数行の処理や条件分岐、ループなども含められます。
def add(x, y):
return x + y
print(add(3, 5)) # 出力: 8
比較すると、lambdaは1行だけで結果を返すのに対し、defは複雑な処理も可能です。
3. 使い分けの目安
- lambda:短い一時的な処理(例:ソートのキー指定、簡単な計算)
- def:複雑な処理、再利用する関数、大量のコードを含む場合
例えば、リストを値の長さでソートするときにlambdaが便利です。
words = ["apple", "banana", "cherry"]
words.sort(key=lambda x: len(x))
print(words) # 出力: ['apple', 'cherry', 'banana']
4. 実用例:mapとlambdaの組み合わせ
lambdaはmap()、filter()、sorted()などの関数と組み合わせると便利です。
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 出力: [1, 4, 9, 16, 25]
このように、わざわざdefで関数を作らず、その場で簡潔に記述できます。
5. lambdaの制限と注意点
lambdaには以下の制限があります。
- 1行でしか書けない(複数行の処理不可)
- 条件分岐や例外処理は基本的に使いにくい
- コードの可読性が下がる場合がある
無理にlambdaを使うと、後でコードを読んだときに分かりにくくなることがあります。
6. 通常関数を選ぶべきケース
複雑な処理や、他の場所からも何度も呼び出す予定がある処理はdefを使いましょう。
def process_numbers(numbers):
result = []
for n in numbers:
if n % 2 == 0:
result.append(n * 2)
else:
result.append(n)
return result
print(process_numbers([1, 2, 3, 4]))
[1, 4, 3, 8]
7. まとめると
lambdaは短く簡単な処理に、defは複雑で再利用する処理に向いています。両方を適材適所で使うことで、Pythonのコードはより効率的で読みやすくなります。