匿名函數
好像每種程式語言都很愛用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帶入抽象化的境界喔.