関数は通常、
def func():
…..
などと定義されるますが、Pythonには名前をつけない関数があることはご存知でしょうか
名前を付けない関数を、無名関数、
lambda関数
と呼んでいます
聞いたこと無い!という方や、
聞いたことあるけどよくわからない!
という方はまず下記をご覧ください
ranking = [(‘Wakki’, 3), (‘Yu’, 4), (‘Christiano’, 2), (‘So Takei’, 1)]
ranking.sort(key=lambda rank: rank[1])
>>> ranking
[(‘So Takei’, 1), (‘Christiano’, 2), (‘Wakki’, 3), (‘Yu’, 4)]
太字の部分でlambda関数を使っています
僕は最初見たとき、
???????
と全く理解できませんでした
本日の記事では、これが一体なんなのか?を説明していきます
lambda関数の基本
一番簡易的なlambda関数は下記のようなものになります
lambda(引数無し)
hello_func2 = lambda: print('hello')
実行すると、
>>> hello_func2()
hello
本来ですと、
def hello_func1():
print('hello')
という関数となりますが、lambdaを使って、
hello_func2 = lambda: print('hello')
と1行になっています
lambdaは
lambda:
のあとに実行したい関数を定義することができます
今回の場合は、
print(‘hello’)
ですね!
lambda(引数有り)
引数はどのように扱うのでしょうか?
例えば下記の関数
def hello_to1(person):
print(f'hello, {person}!!')
>>> hello_to1(‘Yu’)
hello, Yu!!
をlambdaで表すには?
hello_to2 = lambda person: print(f'hello, {person}!!')
となり、実行すると、
>>> hello_to2(‘Yu’)
hello, Yu!!
と通常の関数と同じものになります
lambaで引数を受け取るには、
lambda <引数>: 実行する関数
となります!
本題の関数を解説
記事冒頭のlambda関数も引数をとっています
ranking = [('Wakki', 3), ('Yu', 4), ('Christiano', 2), ('So Takei', 1)]
ranking.sort(key=lambda rank: rank[1])
key=lambda rank: rank[1]
rankがこのlambda関数の引数であり、
引数「rank」へ代入された値のオフセット[1]を取り出していることになります
つまり、この全体の関数の中では、
変数「rank」はranking(リスト)内の一つ一つの要素であるタプル(例:(‘Yu’, 4))を示していて、
rank[1]
により、要素であるタプルのオフセット[1]、つまり順位を示すint型を返す関数となっています
それを受け取りsortメソッドでsortしているということです
これが成り立つとすると、もちろん通常の関数での代用もできる
def rank(ranking):
return ranking[1]
ranking.sort(key=rank)
これでも同様の結果が得られます
ご理解いただけましたでしょうか!?
これが、正体です!
(補足)lambdaの応用
本題である関数の意味は理解いただいたかと思いますが、せっかくlambdaに触れたのでもう少し深堀していきます
lambdaは引数が2つ以上も可能
>>> someone_said = lambda person, sentence: print(f'{person} said “{sentence}”‘)
>>> someone_said(‘Yu’, ‘I will make 100 apps by python’)
Yu said “I will make 100 apps by python”
ここでは、
person
sentence
が引数になりますね!
関数の中にlambdaを入れる
def f(a,b,c):
return lambda x: (a+b+c) ** x
f関数fはa,b,cと3つの引数を取り、その合計をlambdaの引数x乗した値を返します
>>> calc = f(1,2,3)
f関数へa,b,cに値を代入しています
>>> calc(5)
()内に5を代入することで、f関数で返された
lambda x: (1+2+3) **x
にx=5の値を代入して結果を求めます
7776
結果が返されます
xに他の数字を代入すると、
>>> calc(3)
216
>>> calc(4)
1296
同様に別の結果が返ってきます
一行でまとめてすべて実行することもできます
>>> f(3,4,5)(5)
248832
いちいちlambdaに名前をつける作業をせずとも関数は実行できました!
おわりに
lambdaの基本につきましての解説は以上になります
いかがでしたでしょうか?
最初は無理やりでも使ってみる場面を探して使っていると、
どこでは使うべきで使わないべきか、が見えてくるかと思います
前回ご紹介した自作アプリでは、lambdaを使っていますのでもしご覧になりたい方は、下記のリンクで見てみてください!
全体のコードも記載しています
前回ご紹介した自作アプリ↓
本日もありがとうございました!