def関数よりも簡単に記述できるlambda関数の使い方について
lambda関数・無名関数とは?
lambda関数は無名関数と呼ばれ、defで定義する関数のように名前をつけないで利用できます。
lambda関数は関数を1行で定義できるため、便利です。
lambda式の特徴
・関数を1行で定義できる
・他の関数の引数として利用する
lambda関数の用途
lambda関数は、
lambda 引数: 返り値
と定義します。
lambda x: x * 2
#def関数のように名前を付けられますが、PEP8の規約では非推奨
lambda_func = lambda x: x * 2 # 引数はx、戻り値(処理)はx*2
lambda関数の利点を確認するためにdef関数と比較してみます。
def関数の例 名前が必要
defを使って簡単なプログラムを作成します。
def func_testdef(a):
return a * 2
print(func_testdef(2))
---出力結果---
4
lamda関数の例 1行出かける
lambda関数は1行でかけますが、defのように名前をつけることも可能
→名前つけるならdefを使った方が良い
#lambda関数を使ってfunc_testdefと同じ処理をする
func_testlambda = lambda a: a * 2
print(func_testlambda(2))
---出力結果---
4
名前を付けないで1行でかく
#名前を付けないでfunc_testlambdaを使う
print((lambda a: a * 2)(2))
---出力結果---
4
いちいち関数を作らなくても処理をかけるのが良いが、この例だとlambda関数にする必要もないかも
map関数に利用する例
lambda関数は関数の引数に関数を渡すときに利用されるそうです。
よくある例がリストを作成するmap関数の引数にlambdaを利用する例です。
map関数は、定義してるlistに対して、functionの処理を行なって新しいリストを作るのに使います。
map関数は第一引数に関数、第二引数にリストを渡します。
map(function,list)
#第一引数にはlambda関数も渡せる
#第二引数にはリスト以外の集合、辞書、タプルも置ける
def関数の例:税込にするプログラム
#1.08をかける関数を作成
def function(a):
return a * 1.08
prices = [100, 200, 300, 400, 500]
price_map = price_map = map(function, prices)
第一引数の関数を第二引数のリストの要素に順番に適用して、結果を返す関数です。
print(list(price_map))
[108.0, 216.0, 324.0, 432.0, 540.0]
lambda関数を利用する例
prices = [100, 200, 300, 400, 500]
price_lambda = map(lambda x: x*1.08, prices)
print(list(price_lambda))
[108.0, 216.0, 324.0, 432.0, 540.0]
若干短くなります。
リスト内包表記でもかける (補足)
リスト内包表記という記法でもリストを作成することができます。
リストを作成する場合であれば、内包表記でもシンプルに書けます。
prices = [100, 200, 300, 400, 500]
prices_tax = [i * 1.08 for i in prices]
print(prices_tax)
[108.0, 216.0, 324.0, 432.0, 540.0]
内包表記の意味と使い方