天天看點

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 );

調函數工具庫 代碼

1

<code>from</code> <code>functools </code><code>import</code> <code>reduce</code>

從麼 地方 取過來 什麼函數,導入 reduce;

中文翻譯  help(reduce)

有助于減少_functools内置功能子產品:

減少(…)

減少(函數,序列[初始值])&gt;值

采用兩參數累積到一序列的項的功能,

從左到右,以便将序列減少到單個值。

例如,減少(λx,y x,y,[ 1, 2, 3,4, 5 ])計算

(((1 + 2)+ 3)+ 4)+ 5)。如果初始存在,則将其放在項目之前。

在計算中的序列中,當

序列為空。

reduce例子

運作 代碼

2

3

<code>def</code> <code>c(x,y):</code>

<code>    </code><code>return</code> <code>x</code><code>+</code><code>y</code>

<code>reduce</code><code>(c,[</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>,</code><code>5</code><code>])</code>

表達含義

定義 函數 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-&gt;清單表達式

◆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日  王宇林

 51CTO部落格,原文連結:http://blog.51cto.com/xwxhvip/2063459 ,如需轉載請自行聯系原作者