Pythonのラムダ式を高階関数と組み合わせる活用例を徹底解説!初心者向け入門ガイド
生徒
「Pythonのラムダ式って前に習ったけど、高階関数っていうのと組み合わせるともっと便利になるって聞きました。どういうことですか?」
先生
「高階関数とは、『関数を引数として受け取ったり、関数を返したりする関数』のことです。ラムダ式と一緒に使うと、コードを短くスッキリ書けるんですよ。」
生徒
「それって具体的にどういう場面で使うんですか?」
先生
「では、実際の例を見ながら一緒に学んでいきましょう!」
1. 高階関数とは?
まずは高階関数(こうかいかんすう)について説明します。高階関数とは、「関数を引数として渡すことができる関数」や「関数を結果として返す関数」のことです。Pythonには最初から用意されている高階関数がいくつかあります。
代表的な高階関数として、map()、filter()、sorted()、reduce()(functoolsモジュール内)などがあります。
高階関数は、一言でいうと「他の関数を使ってデータを加工・変換する便利な道具」です。
2. ラムダ式とは?おさらい
ラムダ式は、Pythonで関数を簡単に書くための方法です。普通の関数はdefで書きますが、ラムダ式は1行で書けます。構文は以下の通りです。
lambda 引数: 戻り値
例えば、2つの数を足す関数は以下のように書けます。
add = lambda x, y: x + y
print(add(3, 5)) # 8
3. ラムダ式と高階関数を組み合わせる例
では、実際にラムダ式と高階関数を組み合わせて使ってみましょう。
3-1. map() とラムダ式
map()は「すべての要素に同じ処理を適用する」高階関数です。
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)
[1, 4, 9, 16, 25]
この例では、リスト[1, 2, 3, 4, 5]の各要素を2乗しています。lambda x: x ** 2というラムダ式が「数を2乗する関数」として動いています。
3-2. filter() とラムダ式
filter()は「条件を満たす要素だけを取り出す」高階関数です。
numbers = [10, 15, 20, 25, 30]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)
[10, 20, 30]
ここでは偶数だけを抽出しています。x % 2 == 0は「xを2で割った余りが0なら偶数」という意味です。
3-3. sorted() とラムダ式
sorted()は並び替えを行う関数ですが、key引数にラムダ式を渡すことで並び替えの基準を自由に決められます。
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)
['date', 'apple', 'banana', 'cherry']
この例では、単語の長さで並べ替えています。
3-4. reduce() とラムダ式
reduce()はリストなどの要素を順番に1つの値にまとめていく関数です。使用するにはfunctoolsモジュールをインポートします。
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)
120
この例では、リストの全ての数字を掛け合わせています。
4. ラムダ式+高階関数が便利な理由
ラムダ式と高階関数を組み合わせると、わざわざ関数を定義する必要がなく、処理をその場で書けるため、コードが短くスッキリします。
例えば、次のようにdefで関数を定義するよりも、ラムダ式を使ったほうが1行で済みます。
# 通常の関数定義
def double(x):
return x * 2
# ラムダ式で同じ処理
double = lambda x: x * 2
5. 初心者が気をつけるポイント
- ラムダ式は短い処理に使う(長い処理は普通の関数にする)
- 高階関数は、処理を一括でまとめたいときに使う
- 変数名や引数名は意味のある名前にする
これらを意識すれば、Pythonのコードがもっと読みやすく、効率的になります。