python3の日記

Python3を図書とともに勉強していくブログ

【SoloLearn】関数プログラミング-Lambdas

f:id:pokita:20180527114648p:plain

SoloLearn-Functional Programming-Lambdas

 

知ってるようで実は知らないLambdasのまとめ。

復習して「そうだったのか」と思うところが多かったので。

 

そもそもLambdasってなんで必要?

Lambdasの第1項より

 

Creating a function nomally (using def) assigns it to a variable automatically.

This is different from the creation of other objects - such as strings and integers - which can be created on the fly , without assigning them to a variiable.

 

def function ():

  ~~~~~

と関数を定義つけることは、つまるところ、functionという変数に~~~~~以下で定義されているころを代入しているに過ぎない。stringsやintegersは”spam!"や1と書いただけでダイレクト(on the fly)に生成されるのに対して、functionは一旦変数に代入しないと生成できない、となればけっこう不都合である。

例えば、関数Aの引数に関数Bを取る場合、関数Aとは別に関数Bを定義する必要が出てきて非常に面倒くさい。これでは関数プログラミングの弱点となってしまう。

 

before

 

def apply_twice(func,arg):

  return func(func(arg))

 

def add_five(x):

  return x + 5

 

print(apply_twice(add_five,10)

>>>20

 

これを解決するのがLambdaである。このLambda関数は主に単純な関数を引数に取る関数に対して使われる。

 

after

 

def apply_twice(func,arg):

  return func(func(arg))

 

 

print(apply_twice(lambda x: x + 5,10)

>>>20

 

大分短くなった(個人的には可読性は下がったと思うけど)

 

この方法で作られたlambda関数は変数に代入されることがないため、使い捨てであり、また名前を持たないためanonymousと呼ばれている。なんかかっこいい。

 

Lambdasの第2項より

 

Lambdas can only do  things that require a single expression - usually equivalent to a single line of code.

 

lambda関数で表現できるのはあくまでも数学で言うところのn次関数程度であり、" = "で結ばれた一行の数式程度の表現に過ぎない。対して、def で定義される関数はその中にif条件を持ったり、関数の実行を持ったりと多彩である。

 

こぼれ話

Lambdas節の問題第2項

~call the function for the number 8.

の意味を”この関数を実行して8を返せ"と曲解しててしばらく解けなかったゾ…

※正しくは"この関数を8で呼び出せ"という意味。