lambda
lambda
一言で言うと
「lambda」は 2 つの意味で使われる。1 つは Python などの無名関数の構文、もう 1 つは AWS のサーバーレス関数サービス。どちらも「使い捨ての小さな関数」が共通点。
もう少し詳しく
一言で言うと
「lambda」は 2 つの意味で使われる。1 つは Python などの無名関数の構文、もう 1 つは AWS のサーバーレス関数サービス。どちらも「使い捨ての小さな関数」が共通点。
詳細
文脈で意味が決まります。会話の流れがプログラミング言語なら無名関数、インフラ / クラウドなら AWS Lambda です。歴史的にはどちらもラムダ計算 (Alonzo Church, 1930 年代) からの命名で、「名前のない小さな関数」というイメージが共通します。
Python の lambda 式
lambda 引数: 式 の構文で、その場限りの 1 行関数を作ります。def で名前付き関数を作るほどでもないとき、map / filter / sorted / pandas の apply などに渡すのが定番です。
AWS Lambda
リクエストが来たときだけ起動して関数を実行し、終わったら自動でリソース解放するサーバーレスサービス。サーバー管理不要・リクエスト課金・1 秒未満のコールドスタートが特徴です。
具体例
Python lambda 式
# sort のキー関数として
users = [{"name": "Bob", "age": 30}, {"name": "Alice", "age": 25}]
sorted_users = sorted(users, key=lambda u: u["age"])# map で 2 乗
squares = list(map(lambda x: x 2, [1, 2, 3, 4])) # [1, 4, 9, 16]
# filter で偶数のみ
evens = list(filter(lambda x: x % 2 == 0, range(10))) # [0, 2, 4, 6, 8]
複数行や複雑な処理になるなら def で名前付き関数にしたほうが読みやすくなります。
AWS Lambda (Node.js)
// handler.ts — API Gateway から呼ばれる Lambda
import type { APIGatewayProxyHandler } from "aws-lambda";export const handler: APIGatewayProxyHandler = async (event) => {
const name = event.queryStringParameters?.name ?? "world";
return {
statusCode: 200,
body: JSON.stringify({ message: Hello, ${name}! }),
};
};
aws lambda create-function や Serverless Framework、SAM、CDK でデプロイします。
使い分け / トレードオフ
Python lambda 式 — 1 行で済むなら lambda、それ以外は def。lambda を変数に代入する (f = lambda x: ...) のはアンチパターンで、PEP 8 で非推奨です。
AWS Lambda** — 同時実行が読めない・15 分以内に終わる・状態を持たない処理向き。常時稼働の長時間ジョブや、コールドスタートが許容できないレイテンシ要件 (10ms 以下) では ECS / EC2 のほうが向きます。