Pythonのラムダ式とは
Pythonのラムダ式は以下のような記法で書かれる式のことです。
lambda 引数:戻り値
例えば、引数の第二要素を取得するのなら、
lambda d:d[1]
となり、実際に使うのは
(lambda d:d[1])("abcdef")
結果
b
とします。
他の言語で言うところの、無名関数のようなものです。
通常の関数定義との差
通常の返値のある関数との差は特にありません。
例えば
get2 = lambda d:d[1]
と変数に入れてやると、
get2("abcdef")
結果
b
となり、関数と全く同じように使えます。
def get2Func(x): return x[1] get2Func("abcdef")
結果
b
となります。また関数は変数に入れることもできるので、
get2 = get2Func get2("abcdef")
結果
b
となり、ラムダ式も関数も定義の仕方が異なるだけで、全く同じように使えます。
「ラムダ式は変数に入れられるところが便利」という記述を見たことがありますが、それは誤解です。他の多くの言語と同様に、通常の関数でも変数に入れられます。
異なるのは定義の時にそのまま変数に入れられない、ということだけです。
ラムダ式のメリット
ラムダ式のメリットはおそらく次の2つです。
- 短い処理なら記法が簡便となる
- 管理すべきものを減らせる
一つ目の「短い処理なら記法が簡便となる」はそのままです。 先ほどの例なら、ラムダ式なら
lambda d:d[1]
一方関数なら、
def get2Func(x): return x[1]
となり、少しラムダ式の方が短く書けます。
二番目の「管理すべきものを減らせる」を見るために、文字列の二番目の要素でソートする処理を考えてみます。ラムダ式でのコードは以下のようになります。
testList = ["2134","1200","3991","1234","4444"] testList.sort(key=lambda d:d[1])
一方、関数で書くと以下のようになります。
testList = ["2134","1200","3991","1234","4444"] def get2Func(x): return x[1] testList.sort(key=get2Func)
もしこの処理が何万行もあるプログラムの中で、ここでしか使わないものであったとしましょう。
そのような場合でも、関数として「get2Func」を定義してしまうと、他の場所からもこの関数を呼び出せてしまうため、この関数を管理する必要が出てきます。
たとえば、関数の内部の書き換えるときには、思わぬ影響がでないように他の場所で使われていないことを確認しなければなりません。またこれと同じ名前の関数は使えませんし、まぎらわしい名前の関数も使うべきではないでしょう。
ラムダ式なら、そもそも他から参照できる名前を持たないので、そのような管理の煩雑さはなくなります。無名関数の無名であるゆえのメリットと言えます。
ぺージ情報 | |
---|---|
ぺージ名 : | Python/ラムダ式 |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |