Python3.8.5におけるラムダ式について。
#①ラムダを使わないパターン
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに関数fffのオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の関数fffオブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
def fff(ddd): #⑤dddの値を引数として関数fffが実行される
return ddd.capitalize() #⑥capitalize関数で処理されたdddの値を返す → 返り値を④のprint関数で出力
aaa(list, fff) #①bbbとcccに位置引数を指定して関数aaaを実行する
#②ラムダを使ったパターンA
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに無名関数のオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
fff = lambda ddd: ddd.capitalize() #⑤無名関数を作りつつ、dddの値を引数としてcapitalize関数を実行してその値を返す
aaa(list, fff) #①bbbとcccに位置引数を指定して関数aaaを実行する
#③ラムダを使ったパターンB
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに無名関数のオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
aaa(list, lambda ddd: ddd.capitalize()) #①無名関数を作りつつbbbとcccに位置引数を指定して関数aaaを実行する
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに関数fffのオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の関数fffオブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
def fff(ddd): #⑤dddの値を引数として関数fffが実行される
return ddd.capitalize() #⑥capitalize関数で処理されたdddの値を返す → 返り値を④のprint関数で出力
aaa(list, fff) #①bbbとcccに位置引数を指定して関数aaaを実行する
#②ラムダを使ったパターンA
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに無名関数のオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
fff = lambda ddd: ddd.capitalize() #⑤無名関数を作りつつ、dddの値を引数としてcapitalize関数を実行してその値を返す
aaa(list, fff) #①bbbとcccに位置引数を指定して関数aaaを実行する
#③ラムダを使ったパターンB
list = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'Sat']
def aaa(bbb, ccc): #②bbbにlistの値、cccに無名関数のオブジェクトが入る
for ddd in bbb: #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
print(ccc(ddd)) #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する
aaa(list, lambda ddd: ddd.capitalize()) #①無名関数を作りつつbbbとcccに位置引数を指定して関数aaaを実行する
ラムダ式は無名関数を作るための記述法です。
def を使って関数定義をするとその関数には必ず名前がつきますが、ラムダ式で処理を作った場合は、その処理には名前が付けられません。
上記のプログラムの出力結果は、それぞれ以下のようになります。
①の出力結果
Sun
Mon
Tue
Wed
Thu
Fri
Sat
②の出力結果
①と同じ
③の出力結果
①と同じ
capitalize関数は、引数に指定されたすべての単語の頭文字を大文字にして返します。
なので変数list内にある小文字英字の各値は、すべて頭文字が大文字になって出力されています。
①のプログラムをラムダ式で書くと、②または③のようなプログラムになります。
プログラムの処理の流れは、上記コードのコメント部分を参照してください。
ラムダ式を使って無名関数を作るには、以下の定形を使用します。
lambda 引数: 返り値
ラムダ式の例①
lambda x: x.capitalize()
ラムダ式の例②
lambda y: y * 10
以上です。