Python

Pythonでラムダ式(無名関数)を扱う方法について解説

By 2021年3月25日No Comments

ラムダ式(無名関数)は、関数を手軽に無名で定義して、コードをスッキリさせることのできる文法です。それでは、実際にラムダ式について学んでいきましょう。

ラムダ式(無名関数)とは?

Pythonで関数を定義するときは、「def 関数名」のように、関数の名前を必要としますが、ラムダ式(無名関数)はその名の通り、関数名を必要とせず、無名で関数を定義することのできる文法です。

ラムダ式は以下のように書きます。

lambda 引数, 引数, … : 戻り値

def文で関数を定義する場合と見比べると、

lambda 引数, 引数, ...: 戻り値

def 関数名(引数, 引数, ...):
    return 戻り値

関数名が不要になっただけだと理解できます。

ラムダ式を変数に代入して使う

ラムダ式は、下記のように変数に代入することができます。

変数名 = lambda 引数, 引数, … : 戻り値

「変数名(引数)」と書くと、ラムダ式で定義した関数を実行し、値を返却します。

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

実行結果

8

この例のように、def文で関数を定義する場合と同じような動作をします。

実際に、def文による関数定義と見比べると、違いがわかりやすいでしょう。

def add(x, y):
    return x + y

print(add(3, 5))

実行結果

8

ラムダ式をメソッドの引数に渡して使う

以下のようなコードを考えます。

def main(func):
    print(func(5, 8))

main(hoge)

このコードは、main()の引数に関数を与え、その関数に5と8を入力した結果を表示する、という内容のコードです。

下記の例のように、add()関数を定義して、main()に渡してやると、5+8=13を表示します。

def add(x, y):
    return x + y

def main(func):
    print(func(5, 8))

main(add)

実行結果

13

一方ラムダ式では、mainの引数に直接、関数を渡すことができます。

def main(func):
    print(func(5, 8))

main(lambda x, y: x + y)

実行結果

13

このように、ラムダ式は関数名を必要とせず、一行で書くことができるため、コードの見た目がスッキリとします。一度しか使用しないような、使い捨ての関数が必要なときに、ラムダ式はよく用いられます。

ラムダ式で三項演算子「if else」を使う

ラムダ式は、三項演算子「if else」と組み合わせることができます。

なお、三項演算子とは以下のことです。

条件が真のときの戻り値 if 条件 else 条件が偽のときの戻り値

実際の使い方はこのようになります。

func = lambda x: '偶数' if x % 2 == 0 else '奇数'

print(func(2))
print(func(3))

実行結果

偶数
奇数

ラムダ式とsort()を組み合わせる

リストをソートするsort()メソッドがあります。

文字列のリストをソートすると、デフォルトではアルファベット順に並びます。

arr = ['ace', 'xy', 'd']

arr.sort()
print(arr)

実行結果

['ace', 'd', 'xy']

sort()メソッドの引数に、「key = 各要素に適用する関数」とすると、ソート順を変更することができます。

例えば、key引数にlen関数を渡すと、文字列の長さ順でソートされます。

arr = ['ace', 'xy', 'd']

arr.sort(key = len)
# len関数を適用することで、長さ、[3, 2, 1]の並べ替えになる。

print(arr)

実行結果

['d', 'xy', 'ace']

key引数にはラムダ式で定義した関数も渡すことができます。

例えば、文字列の最後尾を基準にソートしたい場合はこのようになります。

arr = ['ace', 'xy', 'd']

arr.sort(key = lambda x: x[-1])
# ラムダ式を適用すると、文字列の最後尾、[e, y, d]の並べ替えになる。

print(arr)

実行結果

['d', 'ace', 'xy']

sort()メソッドのの他、max()やmap()などの組み込み関数でも、key引数にラムダ式を渡すことができます。

まとめ

ラムダ式(無名関数)は、関数名を必要とせず、無名で関数を定義することのできる文法です。ラムダ式を活用できるようになると、コードの見た目がスッキリし、無駄なく書けるようになります。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL