今回のお題
今回は、pythonのlambda関数について取り上げます。
例によって自分用のメモです。
目次
- lambda関数概要
- 基本的な使い方
- 引数の渡し方のパターン
lambda関数概要
まずは、lambda関数とはそもそも何ぞやという話から始めます。
一旦は能書きから入りますが、イメージが湧かなければ一度飛ばした後に次項の具体例をみた上で戻ってきていただいても構いません。
ざっくりと言うと、lambda関数とは名前をつけずに定義できる関数のことを言います。
JavaScriptの無名関数に近いですね。
欠点としては、名前がつかないので複数回使いまわせない、それからpythonの場合は1行でしか書けずif文なども使えない、などがあります。
しかし一度別の箇所で定義したものを呼び出して、と言う手間を省けるので一度しか使わない関数を扱う場合にはコードがスッキリしますし、とりわけ関数の戻り値を別の関数の引数として使いたい場合には大変重宝します。
では、基本的な使い方を見ていきましょう。
基本的な使い方
# 公式
lambda x, y: (x / y)
# lambda 変数: 戻り値 の形で関数を定義
lambda関数は他の関数の引数として用いることで真価を発揮します。
以下の例を見てください。
sorted関数のkeyとしてlambda関数を用いています。
sorted関数は第一引数のリストを昇順に並べ替えます。
もしkey=の形で関数を指定した場合は、リストの各要素にkey関数を適用させた戻り値で順番が決まります。
今回はlambda関数を用いて各要素を3で割った余りを返すようにしたので、引数として与えたリストが「3で割った余が小さい順」に並べ替えられます。
list = [10, 5, 18]
print(sorted(list)) # [5, 10, 18]
print(sorted(list, key=lambda x: x % 3)) # [18, 10, 5]
なお、sorted関数のkeyはあくまで戻り値を使って並び替えの基準を提供するだけです。
元のリストを書き換えたり、新しいリストを返したりするわけではないのでそこは注意してください。
引数の渡し方のパターン
あまりないのですが、lambda関数に引数を渡すケースがあるのでそれに関してもまとめておきます。
print((lambda x: 2 * x)(10))
# 出力:20
関数の引数として、lambda関数の戻り値を使いたいと言う場合には
(lambda 変数: 戻り値)(引数)
と言う書き方をします。
また、他の関数の戻り値がlambda関数になるような場合にも似たような書き方をします。
def hoge(a):
if a == 10:
return lambda x: 2 * x
print(hoge(10)(3))
# 出力:6
hogeの後の一つ目の括弧はhoge関数に引数を渡すためもの、二つ目は戻り値のラムダ関数に引数を渡すためのものと考えるとわかりやすいですね。
終わりに
以上でlambda関数の解説を終わります。
書き方が独特なので早く慣れていきたいですね。