Extreme Thinking
python lambda 妙用

2020-05-27


python 沒 switch 用法 但是有更強的用法 用 dict get 指到 lambda 印出 英文等級 , 找不到的是印出 ‘E’

score = int(input('請輸入分數:'))
level = score // 10
{
    10 : lambda: print('Perfect'),
    9  : lambda: print('A'),
    8  : lambda: print('B'),
    7  : lambda: print('C'),
    6  : lambda: print('D')
}.get(level, lambda: print('E'))()

例如這個 print(add(1)(2))

def add(n1):
    def func(n2):
        return n1 + n2
    return func

變 lambda

add = lambda n1 : lambda n2: n1 + n2

配合 if

max = lambda m, n: m if m > n else n

配合 for loop 例如 (True, False … 然後 SUM 加起來)

count_vowels = lambda s : sum([char in 'aeiouAEIOU' for char in s])

配合 for loop with if 例如

d = lambda klist : ['x' for i in klist if i == 1]
print (d([1,2,1,4]))
--> ['x', 'x']

那 else 要如何處理 ? … 用 map

d = lambda klist : list(map(lambda i : 'x' if i == 1 else 'X', klist))
print (d([1,2,1,4]))
--> ['x', 'X', 'x', 'X']

看前面 lambda function 用 klist 當 lambda 輸入

return 是 list –> list(map(function ,data))

map 的 function 是 lambda i : ‘x’ if i == 1 else ‘X’ –> 輸出 ‘x’ 或 ‘X’

map 的 data 是 klist , 這樣會將 list 內的一個一個丟到前面 function 處理

處理後 map 變 list 就會當成前面 lambda 的 return

data 這是輸入 -> klist