😬

【Python】lambda(ラムダ式)の使い方

2024/09/23に公開

Pythonのlambda(ラムダ式)をご紹介。

最初はラムダじゃなくて、「ラムブダ」って呼んでました...涙

lambda(ラムダ式)とは?

Pythonではdef文で関数を定義しますが、lambdaを使うことで、名前を持たない無名関数を作成することができます。

def文による関数定義と、それに相当するラムダ式での無名関数の対応関係は以下のようになります。

▼ def文

def 名前(引数, 引数, ...):
    return

▼ ラムダ式

名前 = lambda 引数, 引数, ...:

具体例は以下のようになります。

add = lambda x, y: x + y
print(add(3, 5))

# 結果
8

注意

上記では比較のために、ラムダ式を変数に代入することでラムダ式に名前を割り当ててますが、Pythonのコーディング規約であるPEP8では非推奨となっているのでご注意を。(非推奨というだけで、実行可能です)

というのも、ラムダ式はそもそも以下のように「呼び出し可能なオブジェクトを引数で渡すときなどに名前を付けずに使うためのもの」。

ですので、名前をつけて関数を定義する場合はdef文を使うべき、というのがPEP8の考え方となっています。

Always use a def statement instead of an assignment statement that binds a lambda expression directly to an identifier:

# Correct:
def f(x): return 2*x
# Wrong:
f = lambda x: 2*x

https://peps.python.org/pep-0008/#programming-recommendations

使用例

条件を満たす要素を抽出するfilter()では、第一引数に関数(呼び出し可能オブジェクト)、第二引数にリストなどのイテラブルオブジェクトを指定します。

このfilter()の第一引数にラムダ式を指定する方法は以下です。

list = [0, 1, 2, 3, 4, 5]

filter_even = filter(lambda x: x % 2 == 0, list)

print(list(filter_even))

# 結果
 [0, 2, 4]

ここでは、lambda x: x % 2 == 0というラムダ式を、filter()の第一引数に渡しています。

ちなみに、同じ処理を「リスト内包表記」でも書くことができます。

list = [0, 1, 2, 3, 4, 5]

l_even = [x for x in l if x % 2 == 0]

print(l_even)

# 結果
 [0, 2, 4]

参考にしたサイト

https://note.nkmk.me/python-lambda-usage/

https://docs.python.org/ja/3/tutorial/controlflow.html#lambda-expressions

https://docs.python.org/ja/3/reference/expressions.html#lambda

Discussion