Python ラムダ式・無名関数

Pythonのラムダ式・無名関数の書き方を記載します。


ラムダ式とは

関数を記載する方法の1つで、一行で記載しなければいけない。また、関数名をつけないのが推奨されている。(無名関数)
主に、map, filter といった組み込み関数の中の簡単な処理で利用される。


書き方

lambda 引数, 引数, ... : 式

実例 (filterの場合)

filterの第一引数にラムダ式を指定し、第二引数にfilter対象のリストを設定する。
ラムダ式の内容は偶数の場合にTrueになる式を設定。filterの結果は偶数を返すイテレータとなる。偶数のリストを取得したい場合は、イテレータをリストに変換する。

filter(lambda x: x % 2 == 0, [1, 2, 3, 4]) # 偶数フィルター
>> <filter at 0x7fa84d8f28d0> # イテレータ

list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4])) # リストに変換する
>> [2, 4]

実例 (mapの場合)

filterと同様、mapの第一引数にラムダ式を指定し、第二引数にfilter対象のリストを設定する。
ラムダ式の内容は40を加算する式を設定。mapの結果は40が加算されたイテレータとなる。filterと同様に、リストを取得したい場合はイテレータをリストに変換する。

map(lambda x: x + 40, [100, 150, 300])
>> <map at 0x7fa84d8afdd8> # イテレータ

list(map(lambda x: x + 40, [100, 150, 300])) # リストに変換する
>> [140, 190, 340]

メリット

一行で関数の定義ができるので、見やすい。関数名や変数名を考える手間も省けるので、コードをスピーディに書ける。

def で定義した場合とlambda式で定義した場合を比較する。

# defで定義した場合
def add_tax(amount):
    return int(amount * 1.1)

list(map(add_tax, [1000, 5000, 10000]))
>> [1100, 5500, 11000]


# ラムダ式の場合
list(map(lambda x: int(x * 1.1), [1000, 5000, 10000]))
>> [1100, 5500, 11000]

デメリット

処理内容が複雑な場合、見づらくなる。複数行の処理は記載できない。
また、関数名をつけることが非推奨となっているため、無名関数の場合は、違う場所から呼び出すことができない。

その場限りでしか使われない、命名するまでもないような簡単な処理に使われる。


関連リンク