TOP
プログラミング独学コンテンツ一覧
Pythonのラムダ式(無名関数)の使い方と使いどころ

Pythonのラムダ式(無名関数)の使い方と使いどころ

最終更新日
Pythonでは、defという予約語を使うことで関数を表記できます。この書き方とは別に、ラムダ式(無名関数)という関数の作り方が存在しています。
ラムダ式(無名関数)の特徴を簡単に説明すると、**「他の関数と組み合わせて使う補助的な関数」**です。
今回はこのラムダ式(無名関数)の使い方や使いどころを説明します。

ラムダ式(無名関数)とは

先に説明した通り、ラムダ式(無名関数)は「他の関数と組み合わせて使う」ものです。もちろん単体でも使うことはできますが、その真価は他の関数と同時に使うと発揮されます。

ラムダ式(無名関数)の構文

まずは構文を見てみましょう。簡単な例として、「引数に対して2を乗算した数値を返す」ラムダ式(無名関数)を書きます。
calculated = lambda x: x * 2
print(calculated(15))
このとき、xが引数となり、式の右側のx * 2の結果(上記の場合は30)が返ってきます。
日本語を当てはめると以下の通りです。
lambda 引数:
defと違って、結果を返すのにreturnも省略されています。
なお、複数の引数を取る場合は以下のようになります。
lambda 引数, 引数, ...:

ラムダ式(無名関数)の使い方

それでは少し発展して他の関数と組み合わせた場合について説明します。
まずは下記のコードを見てください。
def apply_to_list(nums, f):
    return [f(x) for x in nums]

nums = [1, 2, 3, 4, 5]
squared = apply_to_list(nums, lambda x: x ** 2)
print(squared)
これの出力結果は以下となります。
 [1, 4, 9, 16, 25]
上の例では、apply_to_listはリストを受け取り、与えられた関数fをリストの各要素に適用する関数です。apply_to_listは、引数を2乗するラムダ式(無名関数)と共に結果を返します。
引数としてラムダ式(無名関数)を渡すことで、参照先のapply_to_listが簡素化されました。
このように、ラムダ式(無名関数)を使うことですっきりしたコードが作りやすくなります。

ラムダ式(無名関数)の使いどころ

最後に、頻繁にラムダ式(無名関数)が利用されるシーンを紹介します。以下のようにsortedmapfilterはラムダ式(無名関数)と共に利用されることが多いです。
sortedの例
lst = [(1, 2), (3, 4), (2, 1), (4, 3)]
sorted_lst = sorted(lst, key=lambda x: x[1])
print(sorted_lst)
# 出力 [(2, 1), (1, 2), (4, 3), (3, 4)]
上の例では、各タプルの2番目の要素([1])でリストをソートするためにsortedを使用しています。keyパラメータには、各タプルの2番目の要素を返すラムダ式(無名関数)が設定されています。結果として得られるリストは、抽出されたkeyに基づいて昇順にソートされます。
lst = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, lst))
print(squared)
# 出力 [1, 4, 9, 16, 25]
上の例では、リストの各要素を2乗するラムダ式(無名関数)でmapを使っています。結果として得られるリストには、元の要素を2乗した数が含まれています。
lst = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, lst))
print(even)
# 出力 [2, 4]
上の例では、リストから偶数のみを返すラムダ式(無名関数)でfilterを使用しています。結果のリストには、元のリストの偶数だけが含まれています。

ラムダ式(無名関数)を効率的に使おう

sortedを調べたときに出てきた参考コードに使われているから、といった理由で、なんとなくlambdaを使っている人を何人か見かけました。これをきっかけに、ラムダ式(無名関数)の使い方を覚えて効率的に使っていきましょう。
ラムダ式(無名関数)を使えば、省コード化に役立つだけでなく、使うべきところで使えば可読性を高められます。
Python中級者として通るべき道なので、感覚をつかんで効果的にコードに入れ込んでいきたいところです。