Python的lambda運算式

來源:互聯網
上載者:User

標籤:list   tools   reduce   過程   imp   快速   接收   int   filter   



匿名運算式---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+yreduce(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運算式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.