有時我們在撰寫的 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
都可以得到非常好的效果。
簡單用 filter
和 min
做個演練,下方例子是我要取的現在的 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 我們就介紹到這裡,謝謝各位收看。