Python 入門 ノート (47)ラムダ lambda

ラムダ lambda (無名関数の一種)

変数 l にリスト(曜日)を代入していますが、大文字小文字が統一されていませんので、頭文字大文字に統一してみたいと思います。

l = ['Mon', 'tue', 'wed', 'Thu', 'fri', 'Sat', 'sun']  #リストを宣言
def change_words(words, func):  #関数change_words 引数 words と 関数オブジェクト
    for word in words:   #ループ処理
        print(func(word)) #func(word) = sample_func(word)


def sample_func(word):
    return word.capitalize()  #capitalize() 頭文字大文字にして返してくれます
change_words(l, sample_func)
  #sample_func「関数オブジェクト」を引数にする

結果は、

Mon
Tue
Wed
Thu
Fri
Sat
Sun

変数 l(エル) にリスト代入します。リスト内の曜日は大文字小文字が統一されていません。
change_words関数の引数はwordsとfuncです。ここでfuncは関数を意味しますが名前は何でも大丈夫です。実はfuncは下に書かれているsample_func(word)を呼び出します。
ループ処理内でwordにリストの個々の要素を代入してfunc(word)つまりsample_func(word)でcapitalize関数を実行します。

lambdaを使ってより簡単に記述する

def sample_func(word):
    return word.capitalize()
change_words(l, sample_func)

黄色の関数部分は、下の黄色アンダーライン部分に書き換え可能です。

sample_func = lambda word: word.capitalize()
change_words(l, sample_func)

lambdaの後に、仮引数と:(コロン)を書き、スペースを入れた後returnの後の処理を書きます。

3行が2行に縮まり、同じ結果が得られます。

 

更に以下の様に書き換え可能です。

change_words(l,lambda word: word.capitalize())

3行が1行に縮まり、同じ結果が得られます。

簡単なfunctionを引数とするものは、lambdaを使用することにより一行で済みます。

 

lambdaの使用例:

大文字化capitalize()と小文字化lower()を記入する例

l = [‘Mon’, ‘tue’, ‘wed’, ‘Thu’, ‘fri’, ‘Sat’, ‘sun’]
def change_words(words, func):
    for word in words:
        print(func(word))
# def sample_func(word):
#    return word.capitalize()
# def sample_func2(word):
#    return word.lower()
change_words(l,lambda word: word.capitalize())
change_words(l,lambda word: word.lower())

Mon
Tue
Wed
Thu
Fri
Sat
Sun
mon
tue
wed
thu
fri
sat
sun

 

コメント