お役立ち情報

Pythonのlambda(ラムダ式)の使い方を徹底解説します

ラムダ式ってなんだろう?

lambdaとは、関数を定義せずに一文で関数風に処理するためのコードです。

繰り返し似たような処理を行う際は関数を定義した方が効率的なのですが、たとえばそこで一回使用するだけのロジックであれば、わざわざ関数を定義するのは冗長です。

関数を定義せずに一行で効率的にコーディングするためのコードがlambdaです。概要はこのようなイメージなのですが、実例を見た方がわかりやすいでしょう。そこでこのページでは、lambdaのサンプルコードを積極的に入れつつ解説していきます。

逆に言えば、ソースコードでイメージできていればあえて日本語の定義で覚えておく必要はないかもしれません。

Python関連記事

lambdaの基本的な用法

それではさっそくlambdaの基本的な書き方をサンプルコードで確認します。

以下は税込価格を計算するコードです。

#関数定義して実装する場合
def taxCaluculate(basePrice, consumptionTax):
     return basePrice + (basePrice * consumptionTax)
payment = func(100,0.08)
print(payment1)
#lambda式を用いる場合
print((lambda basePrice, consumptionTax: basePrice + (basePrice * consumptionTax))(100,0.08))

上記のソースコードを実行すると、以下のようにコンソール出力されます。

108.0
108.0

まず前半部分ではlambdaを使用せずに関数を定義して計算を行っています。

taxCaluculateという名前の関数で、引数にbasePrice、consumptionTaxを取り、計算結果を戻り値として返します。

後半部分では、同様のことをlambdaを使用して行っています。lambdaの後ろに引数をセットし、セミコロンの後ろに関数と同じ処理内容の記述を行います。これで関数で記述した場合と同じ処理が行われます。

比較すると、関数で記述するよりも記述が少なく済むことがわかるかと思います。たとえば上記の計算式を何度も使用するなら関数で定義した方が良いのですが、一回しか使用しないならlambdaで書いた方がシンプルですね。

またlambdaを使用することで、他の人がソースコードを見た際に頻繁に使用するロジックでないことがわかります。自分だけでなく他人が見たときに処理がわかることもプロジェクトにおいては重要なので、これも大きなメリットと言えるでしょう。

次に、lambdaは引数なしで記述することも可能です。引数のない関数がある以上、lambdaでも同じことを実現する必要があるからです。具体的には、以下のような記述になります。

nothingArgument= (lambda: '引数なしのラムダ')()
print(nothingArgument)

上記のコードを実行すると、「引数なしのラムダ」と出力されます。

引数なしで変数に文字列を直接格納し、それをそのまま出力しました。

実際このように文字列を出力するだけならlambdaを使用する必要はないので、引数ありで使用することの方が多いでしょう。

lambdaの応用的な用法

lambdaの引数ありとなしの基本的な用法を紹介しましたが、次に応用的な使い方を紹介します。

応用的といっても特別難しいものではなく、for文やif文と組み合わせてより実際のシステム開発に近い使い方を紹介するだけです。

for文と同じようにlambdaで処理する方法

for文と同じ使い方をするlambdaのサンプルコードを紹介しますが、わかりやすいようにfor文を使用した書き方と対比させて紹介します。以下は元の商品の値段に対して消費税を加えた金額に書き換えるプログラムです。

basePrices = [3000,2500,10500,4300]
paymentList = []
for basePrice in basePrices:
paymentList.append(basePrice * 1.08)
print(paymentList)

上記のコードを実行すると、以下のようにコンソール出力されます。

[3240.0, 2700.0, 11340.0, 4644.0]

8%の消費税を加えた金額が出力されました。

上記のソースコードとまったく同じ内容をlambdaを使って実行すると、以下のようになります。

basePrices = [3000,2500,10500,4300]
paymentList = list(map(lambda basePrice: basePrice * 1.08 , basePrices))
print(paymentList)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

[3240.0, 2700.0, 11340.0, 4644.0]

まったく同じ結果になりました。

for文の方では配列の宣言を先に行いましたが、lambdaを使用すれば配列の宣言と同時に処理を実行することが可能です。結果的にソースコードは冗長さがなくなりました。

if文の代わりにlambdaを使用する方法

for文同様、lambdaはif文の代わりに使用することも可能です。

それでは、if文、lambdaそれぞれのサンプルコードを紹介します。

basePrices = [3500,2000,10000,4100]
paymentList = []
for basePrice in basePrices:
if basePrice > 4000:
paymentList.append(basePric)
paymentList.sort()
print(paymentList)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

[4100, 10000]

税抜き価格が4000円より大きい商品を抜き出してソートするイメージです。これと同様の処理をlambdaを使用して記述すると以下のようになります。

basePrices = [3500,2000,10000,4100]
priceList = list(filter(lambda basePrice: basePrice > 4000, basePrices))
priceList.sort()
print(priceList)

上記のソースコードを実行すると、if文を使用した場合とまったく同じ結果が返ってきます。

lambdaのなかで条件式を実行することが可能で、なおかつ配列やリストに対して処理を記述すると要素の数分実行されます。

lambdaは慣れるまで記述があっているのかどうか不安になるかもしれませんが、慣れると非常に便利なコードです。コピペして書き換えれば基本的に問題ないので、積極的に使用すると良いでしょう。

ただし可読性の問題からfor文やif文の記述を優先しているプロジェクトなどもあります。その場合あまり使えないのですが、比較的新しく融通の利きやすいプロジェクトや、個人開発においてはおすすめできるコードです。

関数、if文、for文などが出てきたら、lambdaで書くことはできないか、lambdaで書いた方が効率的ではないか、といった視点を持つと良いかと思います。慣れてくればif文、for文、関数等と同様に、自然とlambdaを使ったコードがイメージできるようになります。

Python関連記事
1,【Pythonのフリーランス求人・案件情報】エンジニア開発単価は?未経験でもいける?
2,Pythonでできることとは?人工知能で強みを発揮!
3,Pythonのインストール方法をまとめてみた
4,Pythonプログラミングに便利なAnacondaとは?機能やPycharmとの違いを解説
5,PythonでAnacondaをインストールする方法から実際の使い方までを解説
6,Pythonの配列を徹底解説!宣言や追加・削除など
7,Pythonのif文の使い方を解説!演算子もおさらい
8,Pythonのfor文の使い方を配列で解説!breakやrangeの使い方もこれでOK
9,Pythonのlambda(ラムダ式)の使い方を徹底解説します(この記事)
10,Pythonの高階関数map/filterの便利な使い方
11,Pythonでclassをどう使う?技術顧問に聞いてみた!

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ