Lambda

      在〈Lambda〉中尚無留言

匿名函數

好像每種程式語言都很愛用Lambda這個字. 這是西臘字母的 ‎λ. 在Python裏, 稱為匿名類別, 請先看如下的一般寫法

def f(x):
    return x*x;
m=map(f, [1,2,3,4,5])
print(list(m))

為了計算x2的值, 所以定義了一個 f(x)的函數, 然後把f函數傳入map之中.

但試想著一件事, 如果 f 函數只有在此處才會被運用, 為了這個簡易的功能定義一個函數, 似乎小題大作, 所以就可以改寫成如下

n=map(lambda x:x*x, [1,2,3,4,5])
print(list(n))

上述就沒有定義 f 函數了, 而是直接把演算法傳入 map 之中, 開頭並以lambda關鍵字為修籂子, 表示這是一個沒有名字的函數, 故稱為匿名函數.

Lambda表示式

語法 : lambda 參數1, 參數2 : 返回值

“:”之前為參數, “:”之後只能有一行表示式, 也就是返回值, 而且不需, 也不能寫return

變數函數

這是一個很奇怪的稱號, 先看如下代碼

def math(x, y):
    return x+y
value1=math(10,20)
print(value1)

value2=lambda x, y:x+y
print(value2(5,10))

我們定義了一個math函數, 然後調用math後, 把傳回值放入value1, 所以value1是30.

但如果使用Lambda後, 照理說value2應該也是一個整數才對. 那麼問題來了, 我們要怎麼調用這個匿名函數了, 因為它沒有名字啊, 根本就無法調用. 所以就直接使用 value2(5,10), 把 value2這個變數當成是一個函數名稱來調用

返回匿名函數

匿名函數也可以當作返回值, 這樣就可以省略定義內部函數的麻煩了, 如下代碼.

請仔細想想, 下面的 f(), 沒有參數, 但為什麼可以算出 3跟 4 的斜邊呢, 其實 f() 就是一個預設參數為 3及 4的函數. 

import math
def triangle(x, y):
    return lambda:math.sqrt(x*x+y*y)
f=triangle(3,4)
print(f())

結論

很多人說, Lambda 只是程式語法上的蜜糖而以, 只是更加精簡我們的代碼, 不然也沒什麼高深的技術. 這話沒錯, 但是如果能愈簡單的寫出代碼, 為什麼不用呢? 難道要寫的很複雜才能表現我們的高竿嗎? 所以會建議大家, 如果能用Lmabda的話, 就一定要用

不過註解一下, Java的Lmabda不僅僅是精簡語法的蜜糖而以, 它可以把Java帶入抽象化的境界喔.

發佈留言