匿名表達式---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内置功能子產品:
減少(…)
減少(函數,序列[初始值])>值
采用兩參數累積到一序列的項的功能,
從左到右,以便将序列減少到單個值。
例如,減少(λ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->清單表達式
◆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 ,如需轉載請自行聯系原作者