53
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python】ラムダ式メモ

Last updated at Posted at 2017-11-26

ラムダ式

ラムダ式とは、関数を式として扱って変数に代入して使用できるようにする方法のことです。
変数に代入するって?もともと変数に入っているのではないかと思うかもしれません。
変数に代入することのメリットとしては、関数を引数に設定することが可能になる点があげられます。
また、処理が簡潔に書けることも魅力の一つです。
いろいろ訂正します。私の理解が間違っていたように思います。
ラムダ式とは、関数に名前を付けずに簡潔に宣言する方法です。
もちろん、宣言したラムダ式を変数に設定することができますが、Pythonコーディングスタイルガイド PEP8にあるようにあまり推奨されていない方法です。(@shiracamusさんありがとうございます。)

書き方

ます、サンプルとして通常の書き方から記述します。
引数に文字列を受け取り、「 World!」と結合して返却する関数をサンプルとして作成します。

通常の関数を用いた書き方
def func(s):
    return s + " World!"

ret1 = func("Hello")
print(ret1)
lambda式を用いた書き方
lamdaSample = (lambda s: s + " World!")
ret2 = lamdaSample("Hello2")
print(ret2)
実行結果
Hello World!
Hello2 World!

通常の方法では、func関数を定義してその関数を実行して戻り値を得ています。
ラムダ式では、defを使用した関数定義は使用せずに、lambdaと記述して、続いて引数、コロン(:)、処理を記述できます。

lambda 引数:処理内容

どんなときに役に立つのか

このようにdefの代わりにラムダ式を使用しても大してメリットはありませんが、ラムダ式の力を発揮するのは関数の引数に関数を指定したいときです。ただし、単純な処理に限りますが。
pythonの標準では、リストの処理をするときに引数に関数を指定する関数がたくさん準備されています。
その中のひとつのmapについてみていきましょう。

def func(s):
    return s+ " World!"

sampleList = ["TEST1", "TEST2", "TEST3"]
newList = []
for s in sampleList:
    newList.append(func(s))

print(newList)
実行結果
['TEST1 World!', 'TEST2 World!', 'TEST3 World!']

このようにリスト内の要素に対してすべてfunc関数を実行して新しいリストを作成したい場合、ラムダ式を使用するともっと簡単に記述することができます。

newList2 = list(map(lambda s: s + " World!", sampleList))
print(newList2)
実行結果
['TEST1 World!', 'TEST2 World!', 'TEST3 World!']

この方法ではmap関数を利用しています。map関数は、引数1に処理内容(ラムダ式)、引数2にリストを受け取ります。
そして、リストの各要素に対して引数1に受け取った関数を実行して返却された値を返すイテレータを作成します。
map関数の中身を記述するとこんな感じではないでしょうか。

map中身
def mapSample(func, list):
    for obj in list:
        yield func(obj)

mapのほかにも要素を抽出するfilter関数等関数を引数にもつ関数が標準で準備されているので皆さん便利な関数を探してください。

最後に

ラムダ式は便利だと思います。ただ、シンプルに書ける分、複雑な処理を記述するにはどうしても向いていない面があります。
それを無理やり記述しようとして可読性が損なわれることもよくあると思いますので、使用するときは注意してください。
プログラミングで大事なことは、読んだ人がすぐ理解できることです。独りよがりなコードにならないようラムダ式を適切に利用して可読性の高いコードを目指しましょう!

53
40
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?