ラムダ式(無名関数)は、関数を手軽に無名で定義して、コードをスッキリさせることのできる文法です。それでは、実際にラムダ式について学んでいきましょう。
目次
Udemyの動画学習でもPythonを勉強しよう!
「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!
UdemyのPythonおすすめ33講座レビューリストラムダ式(無名関数)とは?
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講座レビューリスト