在平時做python作業時總會用到這幾個函式,今天來做個總結
1.lambda函式:
python 使用 lambda 來建立匿名函式。lambda函式的語法只包含乙個語句:所謂匿名,意即不再使用 def 語句這樣標準的形式定義乙個函式。
lambda 只是乙個表示式,函式體比 def 簡單很多。
lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。 lambda
函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧記憶體從而增加執行效率。
lambd(arg1,(,arg2,…argn)):expression
他的格式呢很好理解,直接上**一目了然(這裡用的map,filter後面都會講到的~)
re=
list
(map
(lambda x,y:x+y,[1
,2,3
],[2
,3,4
]))#當運算符號為%時表示判斷
print
(re)
re=
list
(map
(lambda x:x**2,
range(1
,5))
)#當運算符號為%時表示判斷
print
(re)
這個**的另一種形式為:
def
square
(x):
return x**
2result =
list
(map
(square,[1
,2,3
,4,5
]))print
(result)
lambda的簡潔的寫法是不是更簡單更有逼格呢~
再舉乙個栗子:
先寫複雜的形式吧(沒有對比就沒有傷害)
def
is_odd
(n):
return n %2==
1 tmplist =
filter
(is_odd,[1
,2,3
,4,5
,6,7
,8,9
,10])
newlist =
list
(tmplist)
print
(newlist)
看好了lambda的**:
tmplist =
list
(filter
(lambda n:n%2==
0,range(1
,11))
)#上乙個**的簡寫,偶數找出來
print
(tmplist)
兩行解決戰鬥,其實也可以一行
print
(list
(filter
(lambda n:n%2==
0,range(1
,11))
))
是不是驚呆了~~
先解釋一下這個**吧:filter是可以理解為過濾的意思,只要是在0~10的數能被2除餘數為0那麼就選出來,然後range完後就能列印出偶數了,後面詳解。
所以完成一些加減乘除不用def直接lambd就可以了,節省時間(人生苦短,我用python)
再再就乙個栗子:
import math
new=
list
(filter
(lambda x:math.sqrt(x)%1
==0,range(1
,101))
)#選出平方根是整數的數字
print
(new)
lambda我還沒學怎麼深入,以後再補充
2.map函式:
先看菜鳥解釋:
map() 會根據提供的函式對指定序列做對映。第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。
map(function, iterable, …)
function – 函式
iterable – 乙個或多個序列
也就是將乙個函式用在需要用的地方
def square
(x):
return x**2
result=
list
(map
(square,[1
,2,3
,4,5
]))print
(result)
或
re=
list
(map
(lambda x:x**2
,range(1
,5))
)#當運算符號為%時表示判斷
print
(re)
這兩個就能很好的對比lambda的與def函式的用法
並且map與fliter返回的都是生成器(generator),
re=
(map
(lambda x,y:x+y,[1
,2,3
],[2
,3,4
]))#當運算符號為%時表示判斷
print
(re)
執行結果:
<
mapobject at 0x00000214383aadc8
>
也就是可以for遍歷出值:
re=
map(lambda x:x**2
,range(1
,5))#當運算符號為%時表示判斷
for i in re :
print
(i,end=
' ')
filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回乙個迭代器物件,如果要轉換為列表,可以使用 list() 來轉換。上面已經有許多栗子了,這裡簡單舉乙個該接收兩個引數,第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判斷,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。
語法以下是 filter() 方法的語法:
filter(function, iterable)
a=
sum(
list
(filter
(lambda x:x*x,
range(1
,5))
))print
(a)
執行過的小夥伴會發現,返回值為:1,2,3,4
為什麼會這樣呢,因為filter會進行乙個判斷,就不會進行x*x這個步驟
如果我們這樣:
print
(list
(filter
(lambda x:x*x==x*3,
range(1
,5))
))
[
3]
會以列表形式(因為我用的list)得到這個值[3]因為只有3這個值滿足,所以返回3,這是我的理解,希望大家能夠有更好的想法 ,也可以告訴我哦.還有filter只能用乙個可迭代物件,我試過兩個卻報錯了。可能它這個函式引數只能有乙個吧,有興趣的可以去研究一下哦。
4.reduce函式的用法:
reduce() 函式會對引數序列中元素進行累積。當然這個函式也可以和lambda聯動的哦~函式將乙個資料集合(鍊錶,元組等)中的所有資料進行下列操作:用傳給 reduce 中的函式 function(有兩個引數)先對集合中的第
1、2 個元素進行操作,得到的結果再與第三個資料用 function 函式運算,最後得到乙個結果。
注意:python3.x reduce() 已經被移到 functools 模組裡,如果我們要使用,需要引入 functools 模組來呼叫
reduce() 函式:
from functools import reduce
reduce() 函式語法:
reduce(function, iterable[, initializer])
function – 函式,有
兩個引數
iterable – 可迭代物件
initializer – 可選,初始引數
from functools import
reduce
#reduce需要呼叫
a=reduce
(lambda x,y:x+y,
range(1
,5))
print
(a)
結果等於1+2+3+4=10
reduce用於迴圈的做一件事左引數為累加值,右引數為序列值,並在序列為空時用作預設值。
這幾個常用的就介紹到這了,如果再學習當中有其他的好用函式,我會第一時間分享再上面。
如有不恰當的地方,還請指正。
python lambda匿名函式
lambda定義乙個匿名函式 lambda只是乙個表示式,函式體比def簡單很多,很多時候定義def,然後寫乙個函式太麻煩,這時候就可以用lambda定義乙個匿名函式。lambda的主體是乙個表示式,而不是乙個 塊。僅僅能在lambda表示式中封裝有限的邏輯進去。參考鏈結 lambda的特性 乙個語...
python lambda 匿名函式
語法 lambda 引數 表示式 接受引數,執行表示式,返回結果 示例 乙個lambda函式,把引數加10,然後返回結果 x lambda a a 10print x 5 lambda函式可以接受任意數量的引數 示例 乙個lambda函式,將引數a與引數b相乘,然後返回結果 x lambda a,b...
python lambda匿名函式
在學習python的過程中,lambda的語法時常會使人感到困惑,lambda是什麼,為什麼要使用lambda,是不是必須使用lambda?下面就上面的問題進行一下解答。1 lambda是什麼?看個例子 1 g lambda x x 1看一下執行的結果 g 1 2 g 2 3 當然,你也可以這樣使用...