Pythonでラムダ関数と内包表記を比較してみた。(簡易版)

ラムダ関数(ラムダ式)というものは他の言語でも馴染みのあるものです。

いわゆる「無名関数」というもので、

関数に名前をつけず、コード量を削減することができます。

僕のイメージでは、map()関数やfilter()関数にてラムダ式を見ることがよくあります。

Javaでは僕も使用していました。

ですが、Pythonには内包表記というパワフルな記述法があります。

map()関数やfilter()関数などに至っては、内包表記で全て事が足ります。(たぶん)

個人的に、ラムダ式は少し可読性が下がり、

Pythonにおいては、内包表記で完結できるのであれば、

内包表記を使用した方が、可読性も高いと思いました。

map()関数とfilter()関数を例にとって、解説していきます。

 

1.map()関数(ラムダ式)

map()関数とはリスト等のオブジェクトと関数を引数として受け取り、

引数で受け取ったオブジェクトを、引数で受け取った関数に渡され、処理がされます。

ラムダ式で記述すると以下のようになります。

上記はnumbersリスト内の値を全て二乗した後に出力しています。

ラムダ式の部分が少し読みづらいですね。

 

1-2.内包表記で同じ処理を書いてみる

同じ処理を内包表記で記述すると以下のようになります。

内包表記の方が読みやすくないですか?

 

2.filter()関数(ラムダ式)

filter()関数とはリスト等のオブジェクトから、条件に沿った要素のみ抽出できる関数です。

ラムダ式で記述すると以下のようになります。

上記はnumbersリスト内の値から奇数のみを抽出して出力しています。

もちろん読めなくはないですが、個人的には内包表記の方が好きです(笑)

 

2-2.内包表記で同じ処理を書いてみる

こちらの方が直感的に分かりやすい気がします。

 

3.まとめ

結局のところ、人によって読みやすさは変わると思います。。。

今回は「ラムダで出来ることは内包表記でも出来るよ!」(たぶん)と言いたかっただけです!

ラムダで出来て内包表記で出来ないことや、

こういう処理の時はラムダの方が読みやすい、書きやすい等があれば、

ぜひぜひコメントで教えてください。

以上、Tigerでした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です