How to use Python Lambda


How to use Python Lambda

有時我們在撰寫的 function 只有一行 code 此時我們就可以使用 Lambda 來簡化,Lambda 也被稱作匿名函數,簡單易用的特性也讓他在各種語言多少都看得到 Lambda 的身影,這邊簡單介紹 Lamdba 在 Python 的用法。


Python 的 Lambda 只能有一行 code,並且會自動回傳結果

lambda arg1, arg2, ... : expression

例如我們有個 function 僅將兩個引數相加回傳

def sum(x, y):
    result = x + y
    return result

print(sum(1, 2)) # 3

寫成 Lambda 的話就是這樣

print((lambda x, y: x + y)(1, 2)) # 3

Lanbda 也可以重複使用

sum = lambda x, y: x + y
print(sum(1, 2)) # 3
print(sum(3, 4)) # 7

Lanbda 中也可以使用簡單的條件 if else

lambda arg1, arg2, ... : <value_1> if <condition> else <value_2>

<condition> 成立則 return <value_1> 否則回傳 <value_2>

舉個簡單的判斷奇數的例子

odd = lambda value: True if value % 2 == 1 else False
print(odd(3)) # True
print(odd(6)) # False

Lanbda 中也可以使用簡單的條件 if else 還可以 if else (if else (if else …)) 這樣無限制接下去。

lambda arg1, arg2, ... : <value_1> if <condition_1> else (<value_2> if <condition_2> else <value_3>)

<condition_1> 成立則 return <value_1> 否則執行判斷 <condition_2><condition_2> 成立回傳 <value_2> 否則會傳 <value_3> 這樣可以無限疊下去,但因為可讀性會瞬間變差因此除非必要不然建議避免使用。

Lambda 在 Python 中最大的威力就是在一些函數中使用舉凡 max min sort filter 都可以得到非常好的效果。

簡單用 filtermin 做個演練,下方例子是我要取的現在的 Stage 的下一個 Stage。

import enum
class Stage(enum.IntEnum):
    STAGE_0 = 0
    STAGE_1 = 1
    STAGE_2 = 2

nowStage = Stage.STAGE_1
filterList = list(filter(lambda item: item > nowStage, Stage))
nowStage = min(filterList, key=lambda item: item, default = min(Stage))
print(nextStage) # Stage.STAGE_2

那 Python 的 Lambda 我們就介紹到這裡,謝謝各位收看。


WRITTEN BY
Aki

熱愛寫code的開發者,專注於 Android 手機 Native App 開發,對於 IOS 也有涉略。閒暇之餘也學習 JavaScript 等前端框架