1. 程式人生 > >Python的lambda表達式

Python的lambda表達式

單行 san list 整潔 1.5 參數 -o 快速 工具



匿名表達式---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表達式