Lambda について
こんにちは 切口太郎です。
今、IT業界で流行の lambda についてお話します。
lambda は、「ラムダ」と読みます。「ランバダ」ではありません。
1 そもそも lambda とは・・・
lambda は、便利は概念で、抽象化した計算体系と呼ばれています。
抽象化した計算は関数式で表現したりします。
関数式は、ギリシャ文字のλで表現されるので、このような抽象化されて実態を持たないものを lambda と言って使っています。
こんな便利な感じなので、ITの世界では、lambda が大流行です。
Amazon の AWS では、 Lambda というサービスがあり、ECSやEC2を用意せずにユーザのプログラムを実行させるものです。
コンテナーもサーバーの用意せずにプログラムを実行するので、lambda を使っているんでしょうね。(ここは想像ですが)
java などの言語も lambda 式なるものがあります。
java はクラス定義なしの無名クラスが利用できるように言語設計されています。
これは、バックグランドスレッド処理でよく利用されます。
無名クラスは、よく見ると一応、クラスの形式を持っているのですが、lambda 式は、もうクラスの形式を持たないような記述になります。
抽象化されて実態をもたない lambda のイメージが伝わったでしょうか。
2 Python のlambda
Python の lambda は、関数やメソッドの定義をしないで、いきなり内部を記述する方法です。
Python では、関数もメソッドも def を利用したオフサイドルールで記述する必要があります。
lambda の記述はこれを無視して、いきなり処理を記述できます。
プログラミング言語で lambda を採用するのは、「処理を実現する、コード量を減らす」方向で実現されているようです。
2 Python の Lambda
書式はつぎのようになっています。
| lambda 引数: 戻り値 |
Python で関数を定義してみます。
引数で文字列を渡すと、"calling " に渡した文字列を返すだけの処理です。
def function(param):
return "calling " + param
これを lambda 式で記述するとこうなります
lambda param: "calling " + param
単純に、def function(param) の部分を省略した感じですね。
実際に使ってみましょう!
>>> f = lambda param: "calling " + param
>>> print(f("kirikutitarou"))
calling kirikutitarou
|
関数の代わりに利用できました。
java の場合には、stream を使って map / list / filter などの処理で lanbda 式を使えるようになっています。
こちらは、とても便利なのですが、Python の Lambda は、それほど整っていません。
3 内包表記で lambda を使用してみる
lambda は、使い捨ての一時的な関数定義ですので、内包表記を利用した初期化で利用してみます。
内包表記でリストを初期化するプログラムです。
>>> lst = [value for value in range(10)]
>>> print(lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
奇数の値は、-1 を設定し、封数の値はそのまま代入するように変更します。
>>> lst = [value if value %2 == 0 else -1 for value in range(10) ]
>>> print(lst)
[0, -1, 2, -1, 4, -1, 6, -1, 8, -1]
|
この式を lambda で書き換えます。
>>> f=lambda param: param if param % 2 == 0 else -1
>>> lst = [f(value) for value in range(10)]
>>> print(lst)
[0, -1, 2, -1, 4, -1, 6, -1, 8, -1]
|
内包表記がちょっとだけ、見やすくなりました。
今日はこのへんで・・・・
コメント
コメントを投稿