
Pythonでコードを簡潔に書きたいときによく使われるのが「lambda(ラムダ)」です。
特に一時的な関数や、map()
・apply()
・sorted()
などの高階関数と組み合わせて使うことが多く、非常に便利です。
この記事では、lambda
の基本的な使い方から、引数の書き方、活用シーン、注意点までわかりやすく解説します。
lambda とは?
lambda
は、「無名関数(名前のない関数)」 を定義するための構文です。
通常の関数(def
)のように名前を付けず、その場限りの処理を短く書けるのが特徴です。
lambda の基本構文
1 2 |
lambda 引数: 式 |
1 2 3 |
f = lambda x: x * 2 print(f(5)) # 結果: 10 |
- 上記の
lambda x: x * 2
において、左のx
が引数名です - 右の
x * 2
が“返す値(式)” を表しています - コロン
:
は「引数リスト と 返す式 の区切り」 lambda
は“無名関数”を作る構文なので、return
は書かずに右側の式の値がそのまま戻り値になります- 一見すると関数に見えませんが、
lambda x: x * 2
という式が関数オブジェクトを返していて、その結果が変数f
に格納されています
「f(5) と指定すると 引数 x に 5 が入るのと同じで、5 x 2 =10 、変数 f に10が格納される」という流れになります。
具体例①:リスト内の数値を2倍に変換
1 2 3 4 |
nums = [1, 2, 3, 4] doubled = list(map(lambda x: x * 2, nums)) print(doubled) # [2, 4, 6, 8] |
map()
は「map(関数, イテラブル)」という構文を取り、リストやタプルなどのイテラブルに対して指定した関数を順番に適用していきます- 今回の場合は nums がイテラブルに該当し、numsの値の1つ1つが lambdaの引数 x に代入されます
lambda x: x * 2
で「xを2倍にする処理」をその場で定義list()
によって map オブジェクトをリストに変換
このように、lambdaは「ちょっとした処理」を手軽に書くのに最適です。
具体例②:複数引数をとるlambda関数
lambdaは下記のように複数の引数を取ることが可能です。
1 2 |
sum = lambda x, y: x + y print(sum(3, 7)) # 10 |
lambda x, y: x + y
のように、複数の引数をカンマ区切りで指定できる- この場合は「x と y を足す」という処理をその場で定義している
複数の引数をとれるため、足し算だけでなく、掛け算や大小比較などの処理にも応用できます。
具体例③:辞書を値でソート(sorted + lambda)
通常、辞書はキーの順序を持ちませんが、sorted()
と lambda
を組み合わせることで、任意の基準でソートが可能になります。
1 2 3 4 |
data = {'A': 5, 'B': 2, 'C': 9} sorted_items = sorted(data.items(), key=lambda item: item[1]) print(sorted_items) # [('B', 2), ('A', 5), ('C', 9)] |
sorted()
は「sorted(イテラブル, key=関数)」という構文を取り、key
に指定した関数の結果を基準に並べ替えるdata.items()
は「辞書のキーと値のペア(タプル)」のリストを返すlambda item: item[1]
は「タプルの2番目の要素(値)」を基準にする処理を定義している
このように lambda
を key
引数に使うことで、自由に「何を基準に並べ替えるか」を指定できます。
lambda の活用シーン
lambda関数は、ちょっとした処理をその場で書きたいときに便利です。
特に既存の関数をわざわざ定義するほどでもない場合や、一度きりの処理を渡すときに多用されます。
代表的な活用シーンは以下の通りです。
map()
:要素に関数を適用したいときfilter()
:条件に合うものだけ抽出したいときsorted()
:ソートのキーを指定したいときdf.apply()
:pandasで列や行に対して処理したいとき- GUIやイベント処理などで、一時的なコールバック関数を定義したいとき
lambda式と通常の関数定義(def)の違い
通常の関数定義(def
)と比べたとき、lambdaはどう違うのかを整理すると分かりやすいです。
下の表は、それぞれの特徴をまとめたものです。
特徴 | lambda | def(通常の関数) |
---|---|---|
名前 | なし(無名関数) | あり(関数名をつける) |
書ける内容 | 1行の「式」のみ | 複数行・条件分岐・ループなども可 |
使用シーン | 一時的、軽量な処理向き | 再利用したり複雑な処理に向いている |
注意点と制限
lambdaは便利ですが、制約もあるため万能ではありません。
利用時に注意しておきたい点を以下にまとめます。
- lambdaは「式(expression)」しか書けません(if文やfor文などの「文(statement)」は書けない)
- 複雑な処理をlambdaで書くと、逆に読みづらくなることがあります
- 関数名がないためエラーログ等がわかりにくく、デバッグがしにくい場合があります
まとめ
lambda関数は、Pythonで「ちょっとした処理」を手軽に書きたいときに役立ちます。
特に、一時的にしか使わない処理や短い関数をわざわざ def
で定義する必要がないときに便利です。
lambda
は「その場限りの軽量な関数」を定義する構文- 書き方は
lambda 引数: 処理内容
の1行でシンプル map()
やsorted()
などとの組み合わせが非常に便利- 通常の
def
関数と使い分けることが重要 - 複雑な処理や再利用が必要な場合は
def
を使う方が安全
処理をシンプルにまとめたいとき、ちょっとした関数を作りたいときなどに、ぜひ活用してみてください。
場面に応じて lambda
と def
をうまく使い分けるのが、Pythonをスッキリ書くコツです。