Python

Python初学者向け:ラムダ関数について基本から解説

スポンサーリンク

 

この記事はこんな方におススメです
  • Pythonを始めたばかりで基本から学びたい方
  • Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方

▶ 自作関数の作り方は以下の記事で基本から解説しています。

はじめに

今回はラムダ関数を基本から解説します。ラムダ関数は無名関数とも呼ばれ、名前を付けるほどでもない小さな関数を簡単に作ることができます。簡易的に関数を定義できるので、非常に便利で簡単なのですが、初めはとまどうかもしれません。基本から丁寧に解説していきましょう。

ラムダ関数

ラムダ式の書き方

まずはラムダ式の書き方を確認しておきましょう。次のように書きます。

lambda x:処理内容

これが基本です。これは引数が1つの場合の例ですが、引数が複数ある場合には次のようになります。

lambda 引数1, 引数2,..:処理内容

ラムダ関数は引数を受け取って、「:」のあとに記載した処理をする関数です。わざわざ、通常の関数を定義するまでもないものや、1回限りの関数などに使います。このラムダ関数は関数オブジェクトを返すので、変数に代入することができます。

簡単ですが、あまりイメージが湧かないかもしれないですね。実際にコードで確認してみましょう。

# 10を足す関数
plus_10=lambda x:x+10

for i in range(5):
    print(plus_10(i))

この例では、10を加える関数を作って、変数「plus_10」に代入しました。「plus_10」は関数オブジェクトなので、「()」をつけて呼び出すことができます。ここではforループで0~5までを代入しています。

よく使う場面

先ほどは、ラムダ関数を変数に代入する例を見ましたが、このような使い方はあまりしません。よく使うシーンは次のような場合が多いです。

  • 関数の返り値としてラムダ関数を定義する
  • 関数の引数としてラムダ関数を渡す

それぞれのシーンを実際に試してみましょう。

関数の返り値に使う場合

これはクロージャの説明をした時に定義した関数で説明することにしましょう。

▶ 先にクロージャの説明を読む場合は以下の投稿をどうぞ。

まず次の関数を定義してください。

# 指定した数字を加える
def plus_num(num):
    def inner_plus_num(base):
        return base + num
    return inner_plus_num

関数「plus_num」は引数numを受け取り、内部で「inner_plus_num」を定義して、この定義した関数「inner_plus_num」を返します。これは関数オブジェクトで引数baseを指定して呼び出すと、関数「inner_plus_num」が実行され、baseにnumを加えた値を返す、という動きをします。

plus_numの引数に5を指定して試してみましょう。

plus_5=plus_num(5)
for i in range(5):
    print(plus_5(i))

ちゃんと動いていますね。このような短い内部関数をラムダ関数で記述するとすっきりします。上のコードは次のように書き換えることができます。

# 指定した数字を加える
def plus_num(num):
    return lambda base:num + base

plus_5=plus_num(5)
for i in range(5):
    print(plus_5(i))

このように書くと、関数の定義の部分が非常にすっきりしますね。この使い方はよく見かける形です。次に関数の引数として渡す例もみていきましょう。

関数の引数として渡す場合

次の関数を定義しましょう。

# 指定した値に100をかける関数
def multiply(num):
    return num*100

これは引数として指定した数字を100倍する関数です。数字のリストに対して、この関数を適用する場合、次のようにしますね。

# 指定した値に100をかける関数
def multiply100(num):
    return num*100


num_list=list(range(5))
list(map(multiply100,num_list))

もちろんこのままでも問題なく動きます。ただ、いちいちmultiply100を定義しなくても次のように書くことができます。

num_list=list(range(5))
list(map(lambda x:x*100,num_list))

同じ結果が返ってきてますが、こっちの方がコードがすっきりしてますね!

スポンサーリンク

まとめ

今回はラムダ関数の解説をしました。繰り返し使わないような簡単な関数であれば、ラムダ関数を使うのがよいですね。関数もオブジェクトなので、当然、返り値にも引数にも使えます。今回、ラムダ関数をよく使う場面として、「ラムダ関数を返り値にする」「ラムダ関数を引数にする」例も示しました。

コメント

タイトルとURLをコピーしました