It's Friday! 今天我們早一點開始吧~
但我們還是要認真學習!也可以早一點下班去玩啦!
lambda function又叫匿名函式,可以用來快速建立function,但並沒有很明確給這個function一個名稱,即不用給函數一個識別字(identifier)。
我們來看一下pseudocode:
a=lambda var_1,var_2,..... : operation....
lambda 後面放入想要操作的參數,參數可以不只有一個,「:」後面放的就是我們想要做的操作,即我們想要回傳的結果,最後再將整個lambda function指定存到一個變數a
我們利用Day 17的例子接續說明:
#計算兩人的年紀差
def difage(m,n): #the identifier is difage.
return abs(m-n)
age=lambda x,y: abs(m-n)
#這個並非命名,而是將lambda存到一個變數age裡面
print('using function:{}'.format(difage(18,22)))
print('using lambda:{}'.format(age(18,22))))
從上述結果大概可以發現,age(variable)的效果大概跟difage(identifier)類似
我們來看看下面這個例子,如何將lambda function放到function
def squ_m(m): #the identifier is difage.
return lambda x: m**x
pre_ans=squ_m(3)
#這裡我們用pre_ans用來接squ_m(m)這個function回傳回來的變數。因此,pre_ans即儲存lambda x: m^x
#所以接下來的操作就是lambda function的操作,利用變數pre_ans
print('3^5:{}'.format(pre_ans(5)))
print('3^3:{}'.format(pre_ans(3)))
pre_ans=squ_m(5)
print('5^3:{}'.format(pre_ans(3)))
在我們熟悉function的操作後,會發現recursion是其中一個很重要的應用!所有函數都應該可以拆到最小的basic problem。當然!lambda function也可以進行recursive,變成 recursive lambda functions。
fib=lambda x: 0 if x==0 else (1 if x<=1 else fib(x-1)+fib(x-2))
#lambda <args> : <return Value> if <condition > ( <return value > if <condition> else <return value>)
print('fib(5)={}'.format(fib(5))) #output:5
print('fib(8)={}'.format(fib(8))) #output:21
其實lambda還有其他應用,但我們今天就先到這裡吧!
其它們我們明天再接再厲啦!
Time to party!