Phython

【Python】ラムダ式の使い方とメリットを分かりやすく解説!

本記事では、pythonで用いられる文法の一つであるラムダ式について、基本的な使い方と使用するメリットをご紹介していこうと思います。

ラムダ式は、使用する場面によってはとても便利な機能を持った文法になっているので、ぜひ本記事を参考にして使い方をマスターしてみてください。

ちなみに、本ブログでは初心者の方でも理解できるように丁寧に説明しているので、全くの初心者という方も安心してください。

また、pythonをまだインストールしていないといった方は以下の記事を参考にしてインストールしてみましょう。

この記事でわかること

  • ラムダ式の使い方
  • ラムダ式を使用するメリット

 ラムダ式について

まず初めに、ラムダ式とはどのようなものなのかについて説明していこうと思います。
また、ラムダ式について理解するうえで、関数の知識が必須となってくるので、「関数についてよくわからない」といった方は以下の記事から先に見ることをおすすめします。

ラムダ式とは?

ラムダ式とは、名前を付けるほどでもない小さい関数を簡単に作成したいときに使用する式のことです。

また、ラムダ式を使用した関数のことを、名前がない関数として無名関数と呼んだりしています。

ちなみに、ラムダ式の基本構文は以下の通りです。

lambda 引数:処理

これだけ見ても少しイメージがつきにくいと思うので実際に使用している例を確認して、ラムダ式の使い方を覚えていきましょう。

ラムダ式の使い方

<input>(ラムダ式を使用しない場合)

def add(a, b):
    print(a + b)

add(10, 20)

<output>

30

まずは上記コードを見てみましょう。
こちらは、特にラムダ式を使用していない、いたって普通の関数を実行しているコードになっています。

ここで、先ほども少し述べたようにラムダ式とは、小さい関数を簡単に作成したいときに使用する式のことです。
なので、この関数『add』をラムダ式を用いて記述していきましょう。

<input>(ラムダ式を使用した場合)

func = lambda a, b: print(a + b)
func(10, 20)

<output>

30

このような感じです。
先ほど紹介したラムダ式の基本構文を見てもらえれば分かると思うのですが、『a, b』が引数、『print(a + b)』がこの関数で行う処理となっています。

しかし、このコードですとあまり「ラムダ式ってすごい!」とはなりませんよね。
別に『def』を使用したコードと比べてもあまり変わりません。

なので、もう少し複雑なコードを用いてラムダ式の有用性を確認していきたいと思います。

ラムダ式の有用性の確認

例えば、以下のようなコードについて考えていきましょう。

<input>(ラムダ式を使用しない場合)

l = ["Soccer", "baseball", "swimming", "tennis", "Basketball"]

# 関数宣言
def change_words(words, func):
    for word in words:
        print(func(word))

def capital_func(word):
    return word.capitalize()

# 関数呼び出し
change_words(l, capital_func)

<output>

Soccer
Baseball
Swimming
Tennis
Basketball

上記のコードでは、関数『change_words』を引数を『l, capital_func』と設定して呼び出しています。
関数『change_words』の中ではfor文によってwordsの要素一つ一つに対して関数funcを適用するといった処理を行っています。

今回は、引数としてlとcapital_funcを与えているので、lの要素一つ一つに対して関数capital_funcを適用しているといった感じですね。
関数capital_funcでは、与えられた引数の先頭を大文字にして返すといった処理を行っているので、出力結果が、lの各要素の先頭文字を大文字に変換したようなものになっているのが見て取れると思います。

では、このコードに対してラムダ式を適用していきましょう。

<input>(ラムダ式を使用した場合)

l = ["Soccer", "baseball", "swimming", "tennis", "Basketball"]

# 関数宣言
def change_words(words, func):
    for word in words:
        print(func(word))

# 関数呼び出し
change_words(l, lambda word: word.capitalize())

<output>

Soccer
Baseball
Swimming
Tennis
Basketball

上記のラムダ式を使ったコードでは、先ほどあった文字列の先頭を大文字にするといった関数『capital_func』をラムダ式を用いて定義しています。
こうすることで、わざわざ個別に『capital_func』を宣言する必要がないので、コード量が少し減りましたね。

また、以下のような場合はどうでしょう。

<input>(ラムダ式を使用しない場合)

l = ["Soccer", "baseball", "swimming"]

# 関数宣言
def change_words(words, func):
    for word in words:
        print(func(word))

def capital_func(word):
    return word.capitalize()

def up_func(word):
    return word.upper()

def low_func(word):
    return word.lower()

# 関数呼び出し
print("****This is capital_func****")
change_words(l, capital_func)
print("****This is up_func****")
change_words(l, up_func)
print("****This is low func****")
change_words(l, low_func)

<output>

****This is capital_func****
Soccer
Baseball
Swimming
****This is up_func****
SOCCER
BASEBALL
SWIMMING
****This is low func****
soccer
baseball
swimming

このように、複数の関数を宣言して呼び出す場合、同じような宣言コードを何度も書くのは正直面倒くさいです。
これを、ラムダ式を用いて書いてみましょう。

<input>(ラムダ式を使用した場合)

l = ["Soccer", "baseball", "swimming"]

# 関数宣言
def change_words(words, func):
    for word in words:
        print(func(word))


# 関数呼び出し
print("****This is capital_func****")
change_words(l, lambda word: word.capitalize())
print("****This is up_func****")
change_words(l, lambda word: word.upper())
print("****This is low func****")
change_words(l, lambda word: word.lower())

<output>

****This is capital_func****
Soccer
Baseball
Swimming
****This is up_func****
SOCCER
BASEBALL
SWIMMING
****This is low func****
soccer
baseball
swimming

どうでしょうか。
先ほどのラムダ式を使っていない例と比べて、コード量が少なくなっているのがわかると思います。

このように、ラムダ式を用いることでコードの削減を行うことが出来ます。
よく覚えておきましょう。

ラムダ式を使用するメリット

ラムダ式を使用するメリットは以下の2つです。

  • 関数の宣言を行う必要がないため、コードが見やすい
    ⇒先ほどの例でも示しましたが、単純にコード量が減りますね。
  • 関数名の衝突を考えなくて良い
    ⇒関数に名前を付ける必要がないので、ラムダ式を使用していれば関数名の衝突は起こりえません。

メリットをよく理解して、状況に合わせて使用するようにしましょう。

 まとめ

今回は、ラムダ式について使い方と使用するメリットを紹介してきたのですが、いかがだったでしょうか。

ラムダ式は、主に簡単な関数の宣言を省略してコードを簡潔にしたいときに使用します。

本記事を参考にして、皆さんも実際にラムダ式を用いたプログラムを書いてみましょう。

-Phython
-,