iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 15
2
Software Development

從0開始學習程式-Python系列 第 16

[Day19]Hey! lambda 你在搞什麼?


It's Friday! 今天我們早一點開始吧~
但我們還是要認真學習!也可以早一點下班去玩啦!

What is lambda function?

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)類似

那funtion裡面可以有lambda function?

我們來看看下面這個例子,如何將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看起來很猛,但可讀性相對比較低,還是建議要寫function,還是透過前幾天所提供的方法進行比較好!

其實lambda還有其他應用,但我們今天就先到這裡吧!
其它們我們明天再接再厲啦!

Time to party!


上一篇
[Day18]如果__name__ 好好用
下一篇
[Day20]lambda的三角督...filter(),map(),reduce()
系列文
從0開始學習程式-Python32

尚未有邦友留言

立即登入留言