おぼえがき

過ちては則ち改むるにうんぬんかんぬん

ラムダ式について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5におけるラムダ式について。

#①ラムダを使わないパターン
list = ['sun''mon''tue''wed''thu''fri''Sat']

def aaa(bbbccc):        #②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(listfff)            #①bbbとcccに位置引数を指定して関数aaaを実行する


#②ラムダを使ったパターンA
list = ['sun''mon''tue''wed''thu''fri''Sat']

def aaa(bbbccc):        #②bbbにlistの値、cccに無名関数のオブジェクトが入る
  for ddd in bbb:         #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
    print(ccc(ddd))       #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する

fff = lambda dddddd.capitalize() #⑤無名関数を作りつつ、dddの値を引数としてcapitalize関数を実行してその値を返す

aaa(listfff)            #①bbbとcccに位置引数を指定して関数aaaを実行する


#③ラムダを使ったパターンB
list = ['sun''mon''tue''wed''thu''fri''Sat']

def aaa(bbbccc):        #②bbbにlistの値、cccに無名関数のオブジェクトが入る
  for ddd in bbb:         #③for文でbbb内のリストの値を0から順番に抽出しつつその値をdddに入れる
    print(ccc(ddd))       #④ccc内の無名関数オブジェクトにdddを引数として渡しつつ実行し、返り値を出力する

aaa(listlambda dddddd.capitalize())  #①無名関数を作りつつbbbとcccに位置引数を指定して関数aaaを実行する

ラムダ式は無名関数を作るための記述法です。

def を使って関数定義をするとその関数には必ず名前がつきますが、ラムダ式で処理を作った場合は、その処理には名前が付けられません。

 

 

上記のプログラムの出力結果は、それぞれ以下のようになります。

 

①の出力結果

Sun
Mon
Tue
Wed
Thu
Fri
Sat

 

②の出力結果

①と同じ

 

③の出力結果

①と同じ

 

 

capitalize関数は、引数に指定されたすべての単語の頭文字を大文字にして返します。

なので変数list内にある小文字英字の各値は、すべて頭文字が大文字になって出力されています。

 

①のプログラムをラムダ式で書くと、②または③のようなプログラムになります。

プログラムの処理の流れは、上記コードのコメント部分を参照してください。

 

 

ラムダ式を使って無名関数を作るには、以下の定形を使用します。

 

lambda 引数: 返り値

 

 

ラムダ式の例①

lambda x: x.capitalize()

 

ラムダ式の例②

lambda y: y * 10

 

 

以上です。