Pythonのlambda式(無名関数):名前のない関数を一行で書く方法と活用例

Pythonには、def キーワードを使って関数を定義するほかに、lambda(ラムダ)式を使って「名前を持たない関数(無名関数)」を作成する方法があります。

lambda 式を使うと、非常に短い関数をわざわざ定義することなく、その場で一行で記述できるため、コードが簡潔になります。特に、他の関数(高階関数)の引数として処理を渡す場合に重宝します。

この記事では、lambda 式の基本的な書き方と、map()sorted() と組み合わせた実用的な使い方について解説します。

目次

lambda 式の基本構文

lambda 式は、以下のような構文で記述します。

構文:

lambda 引数: 返り値となる式

def 文による関数定義と比較してみましょう。例として、受け取った数値を2乗して返す関数を考えます。

通常の関数定義 (def)

def square_def(x):
    return x ** 2

print(f"def: {square_def(5)}")

lambda 式による定義

# x を受け取り、x ** 2 を返す関数を作成し、変数 square_lambda に代入
square_lambda = lambda x: x ** 2

print(f"lambda: {square_lambda(5)}")

実行結果:

def: 25
lambda: 25

return 文を書く必要がなく、式の結果が自動的に戻り値となります。このように、単純な計算や処理であれば、lambda を使うことで非常に短く記述できます。

高階関数との併用

lambda 式が真価を発揮するのは、関数を引数として受け取る「高階関数」と一緒に使う場合です。わざわざ def で名前付き関数を作るまでもない「使い捨ての処理」を渡すのに適しています。

1. map() 関数での利用

map() は、リストなどの全要素に対して、指定した関数を適用する組み込み関数です。

例として、数値のリストを「金額(文字列)」に変換する処理を行います。

price_list = [1000, 2500, 500, 12000]

# リストの各要素 x に対して、f"{x:,}円" という書式適用を行う
# mapオブジェクトを list() でリストに変換して表示
formatted_prices = list(map(lambda x: f"{x:,}円", price_list))

print(formatted_prices)

実行結果:

['1,000円', '2,500円', '500円', '12,000円']

2. filter() 関数での利用

filter() は、条件に一致する(結果が True になる)要素だけを抽出する関数です。

例として、数値リストから「3の倍数」だけを取り出します

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# x % 3 == 0 (3で割り切れる) 要素のみ抽出
multiples_of_three = list(filter(lambda x: x % 3 == 0, numbers))

print(multiples_of_three)

実行結果:

[3, 6, 9]

3. sorted() 関数での利用(ソートキーの指定)

最も実用的なのが、リストの並び替え(ソート)におけるキーの指定です。辞書やタプルのリストを、特定の要素を基準に並び替えたい場合に lambda が活躍します。

例として、ユーザー情報の辞書リストを「年齢」順に並び替えます。

# ユーザー情報のリスト
user_list = [
    {"name": "Tanaka", "age": 45},
    {"name": "Sato",   "age": 30},
    {"name": "Suzuki", "age": 38}
]

# age (年齢) を基準にソートする
# lambda x: x["age"] は、辞書を受け取り年齢を返す関数
sorted_users = sorted(user_list, key=lambda x: x["age"])

print(sorted_users)

実行結果:

[{'name': 'Sato', 'age': 30}, {'name': 'Suzuki', 'age': 38}, {'name': 'Tanaka', 'age': 45}]

key= 引数に lambda 式を渡すことで、「辞書そのものではなく、辞書の中の age の値を比較して並べる」という指示を簡潔に記述できました。

まとめ

  • lambda 引数: 式 の形式で、無名関数を作成できます。
  • return は記述せず、式の評価結果がそのまま戻り値になります。
  • map()filter()sorted() などの高階関数と組み合わせることで、コードを簡潔かつ効率的に記述できます。
  • 処理が複雑になり、複数行が必要になる場合は、無理に lambda を使わず def で通常の関数を定義することを推奨します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次