Python的lambda表達式
匿名表達式---lambda
介紹匿名函數- 也是就lambda表達式。
介紹幾個 序列處理的函數,比如序列過濾、把所有元素都拿過來做某些操作,這種的序列處理函數。
這樣的函數都有一些特點,會借用別函數來進行操作。這裏就會用到lambda
?匿名函數
lambda 函數是一種快速定義單行的最小函數,是從Lisp借用來的,可以用在任何需要函數的地方。
lambda 是一個 匿名函數,不需要名字的函數,它更像一像是一個指令,通常只需要一行代碼去做一件事情的函數,都可以用lambda定義它。
不需要函數名字,只需要函數功能的,就會用到它。
特點
◆使用Python寫一些執行腳本時,使用lambda可以省去定
義函數的過程,讓代碼更加精筒。
◆對於一些抽象的,不會別在的地方再復用的函數,有時
候給函數起個名字也是個難題,使用lambda不需要考慮
命名的問題。只用到一次,執行一次函數效果的函數,可以選擇簡潔一點的lambda
◆使用lambda在某些時候讓代碼更容易理解。
lambda應用實例
◆reduce為逐次操作list裏的每項,接收的參數為2個,最後
返回的為一個結果
◆>>>defmyadd(x,y):
◆>>>
returnx+y
◆>>>sum =reducc(myadd,(1,2,3))
◆>>>6
工作原理
reduc (借助函數操作,序列(1,2,3,4,5))
reduc用來傳值
myadd可以是 任意一個函數,這個函數一定能接受兩個值
reduce每次會傳遞給兩個值,
演示 reduce
註意在py2當中,reduce是直接可以拿來用的,py3當中使用會提示 沒有定義、
原因是 在 py3當中 把reduce,放到了一個函數工具庫的地方一個模塊,(func tools );
調函數工具庫 代碼
from functools import reduce
從麽 地方 取過來 什麽函數,導入 reduce;
中文翻譯 help(reduce)
有助於減少_functools內置功能模塊:
減少(…)
減少(函數,序列[初始值])>值
采用兩參數累積到一序列的項的功能,
從左到右,以便將序列減少到單個值。
例如,減少(λx,y x,y,[ 1, 2, 3,4, 5 ])計算
(((1 + 2)+ 3)+ 4)+ 5)。如果初始存在,則將其放在項目之前。
在計算中的序列中,當
序列為空。
reduce例子
運行 代碼
def c(x,y): return x+y reduce(c,[1,2,3,4,5])
表達含義
定義 函數 c 需要 用到兩個值(x,y):
返回兩個值相加的結果 return x+y
reduce需要函數才能使用
reduce(c,[1,2,3,4,5,]) 內置函數調用函數 使用
現在這個案例裏面的,裏面定義的函數c ,僅僅是為了 reduce服務的。
只會用到一次,所以像這樣代碼 在程序當中就沒有必要讓它出現。
可以選擇 用 lambda 表達式,來定義它
lambda 表達式 可以 沒有 名字,
直接後面 就是 函數的參數,
有幾個 寫幾個 參數 x,y : 後面 是返回 進行的操作;
返回的是一個對象,可以給它定義一個名字
cc = lambda 表達式 x,y:x+y
用法: lambda 定義了要兩個值,就要給它兩個值。
cc(2004,14)
表達式運行 兩個值相加,
所以當 像 reduce 需要用到這種函數的時候,不用去單獨為了它 定義一個函數,可以直接把lambda表達式 寫進去。
lambda 表達式
運行代碼
reduce(lambda x,y:x+y,[1,2,3,4,5])
表達含義
reduce 直接 (lambda x,y:x+y ,[1,2,3,4,5]後面是序列,可以任何方式得到它)
所以這種情況下,不需要去為了我這個函數能夠工作,去單獨定義一個函數放過來,可以直接用lambda表達式寫到這就可以。
除了 reduce之外還有 類似的 列表處理函數,
都是需要 借助一個函數 來工作的。
序列處理函數
◆filter()
fiter 過濾的,依次列表取值,符合就返回出來
◆map
如果你要對列表每一個元素 進行 遍歷,進行操作的話,用map,map也是依次取值,得到值 進行定義的運算,返回每一個值 運算的結果。
◆reducel
reduce為逐次操作list裏的每項,接收的參數為2個,最後
返回的為一個結果
符合使用 條件的都可以使用,lambda表達式;
雖然看起來很整潔,可以不用單獨運行一個東西,去定義一個函數。註意 這樣代碼,能不能一下能讀懂,如果你讀起來更加費力了,這不是python追求的結果,不是什麽都用 lambda表達式,也可以用列表 表達式,
他們都是對 一個序列進行操作;
列表表達式寫法
lambda->列表表達式
◆map的例子,可以寫成:
◆print [x * 2 + 10 for x in foo]
print ([x * 2 + 10 for x in foo])
python3中,去除了print語句,加入print()函數實現相同的功能。
◆filter的例子可以寫成:
◆print[x for x in foo if x%3 == 0]
print([x for x in foo if x%3 == 0])
py3用法
所以這種東西,是根據你的實際需要,來選擇用哪一個更合適,沒有更合適
大多數情況下根據你的習慣、或者喜好來用。
率先使用 效率比較高的。
本章獲取知識點
1.認識了 lambda表達式 語法
2.以及什麽時候用
運用到這種只被執行一次函數的時候,可以定義一個lambda,擺在一個關鍵的位置就可以了。
2018-1.28日 王宇林
Python的lambda表達式