Python-12-lambda

lambda 函數是一個簡短的匿名函數,這裏介紹它的經典用法。

語法

lambda 語法: lambda 參數列表(支持多個參數):計算表達式

lambda x,y,z:x+y+z
經典用法
  • filter() 方法藉助於一個函數來過濾給定的序列,該函數測試序列中的每個元素是否爲真。
    • 基礎語法:filter(fun, iterable)
    • 參數:fun 測試 iterable 序列中的每個元素執行結果是否爲 True,iterable 爲被過濾的可迭代序列
    • 返回值:filter object
def is_upper(c):
    # 字母爲大寫時爲 True
    return ord(c)<ord('a') 				
# 因爲 filter 返回的是一個 filter object,所以輸出的時候需要用 list 進行轉換
print(list(filter(is_upper, 'AbCdEfG')))
## 輸出結果: ['A', 'C', 'E', 'G']
  • filter with lambda: print(list(filter(lambda x:ord(x)<ord('a'), 'AbCdEfG')))

  • map() 函數的主要作用是可以把一個方法依次執行在一個可迭代的序列上,比如 List 等。

    • 基礎語法:map(fun, iterable)
    • 參數:fun 依次處理 iterable 中的所有元素,iterable 爲被過濾的可迭代序列
    • 返回值:map object
def roll(c):
	# 字符加 1, a 變 b
    return chr(ord(c)+1)
# 因爲 filter 返回的是一個 map object,所以輸出的時候需要用 list 進行轉換
print(list(map(roll, 'abcdef')))
## 輸出結果: ['b', 'c', 'd', 'e', 'f', 'g']
  • map with lambda: print(list(map(lambda x:chr(ord(x)+1), 'abcdef')))

  • reduce() 函數用於在列表(可迭代序列)上執行某些計算並返回結果,它將滾動計算列表中的所有元素,並得出統計結果。

    • 基礎語法:reduce(fun, iterable)
    • 參數:fun 有兩個參數,一個對應於 iterable 每一個元素的方法,另一個爲上一次執行的結果,iterable 爲被過濾的可迭代序列
    • 返回值:最終的 fun 的返回結果
    • Python3 中 reduce 不在作爲保留字,該函數轉移到了 包中
from functools import reduce
def sum(x,y):
	return x+y
print(reduce(sum, [1, 2, 3, 4]))
  • reduce with lambda: print(reduce((lambda x,y:x+y), [1, 2, 3, 4]))
錯誤的例子

不要在賦值語句中使用lambda,相比較於顯式的def語句,lambda的唯一優勢是能鑲嵌在一個很長的表達式裏,而不是用來代替 def。

# 推薦的寫法:
def f(x): return 2*x

# 不推薦的寫法:
f = lambda x: 2*x
參考文檔

https://segmentfault.com/a/1190000018114755

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章