def add(x,y,f):
return f(x) + f(y)
op = add(1,1,abs) #這里把python內(nèi)置函數(shù)abs作為參數(shù)傳遞給add
print op
結(jié)果:2
python里的高階函數(shù)有 filter、map、reduce、sorted、匿名函數(shù)lambda等
匿名函數(shù):
專業(yè)從事做網(wǎng)站、網(wǎng)站制作,高端網(wǎng)站制作設(shè)計(jì),小程序設(shè)計(jì),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用H5建站+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站建設(shè),讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動,隨時(shí)提供解決方案,暢聊想法和感受。python使用lambda來創(chuàng)建匿名函數(shù)
- lambda 只是一個(gè)表達(dá)式,函數(shù)體比 def 簡單很多。
- lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
- lambda 函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。
- 雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。
語法:lambda 函數(shù)的語法只包含一個(gè)語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
#lambda 參數(shù)列表:return [表達(dá)式] 變量
# 由于lambda返回的是函數(shù)對象(構(gòu)建的是一個(gè)函數(shù)對象),所以需要定義一個(gè)變量去接收
實(shí)例1
sum = lambda arg1, arg2: arg1 + arg2;
# 調(diào)用sum函數(shù)
print ("相加后的值為 : ", sum( 10, 20 )) # 相加后的值為 : 30
print ("相加后的值為 : ", sum( 20, 20 )) # 相加后的值為 : 40
實(shí)例2
#對字典排序
infors = [{"name":"wang","age":18},{"name":"li","age":20},{"name":"qian","age":30}]
infors.sort(key=lambda x:x['age']) #根據(jù)值對字典排序
print(infors)
實(shí)例3
def test(a,b,func):
result = func(a,b)
return result
num = test(11,22,lambda x,y:x+y)
print(num)
filter函數(shù)
filter() 函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個(gè)參數(shù),第一個(gè)為函數(shù),第二個(gè)為序列,序列的每個(gè)元素作為參數(shù)傳遞給函數(shù)進(jìn)行判,然后返回 True 或 False,最后將返回 True 的元素放到新列表中。
- 語法:filter(function, iterable)
- 參數(shù):function---- 判斷函數(shù),iterable -- 可迭代對象。
- 返回值:返回列表。
實(shí)例
def is_odd(n):
return n % 2 == 1
alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(alist)
map函數(shù)
接收一個(gè)函數(shù) f 和一個(gè)或多個(gè)序列l(wèi)ist,并通過把函數(shù) f 依次作用在 序列l(wèi)ist 的每個(gè)元素上,得到一個(gè)新的 list 并返回。
- 語法:map(function, iterable, ...)
- 參數(shù):function -- 函數(shù),iterable -- 一個(gè)或多個(gè)序列
- 返回值:Python 2.x 返回列表。Python 3.x 返回迭代器。
實(shí)例
>>>def square(x) : # 計(jì)算平方數(shù)
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 計(jì)算列表各個(gè)元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函數(shù)
[1, 4, 9, 16, 25]
# 提供了兩個(gè)列表,對相同位置的列表數(shù)據(jù)進(jìn)行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
reduce函數(shù)
reduce()函數(shù)接收的參數(shù)和 map()類似,但是行為不同。reduce() 函數(shù)會對參數(shù)序列中元素進(jìn)行累積。reduce()傳入的函數(shù) f 必須接收兩個(gè)參數(shù),用傳給 reduce 中的函數(shù) f(有兩個(gè)參數(shù))先對集合中的第 1、2 個(gè)元素進(jìn)行操作,得到的結(jié)果再與第三個(gè)數(shù)據(jù)用 f 函數(shù)運(yùn)算,最后得到一個(gè)結(jié)果。
- 語法:reduce(function, iterable[, initializer])
- 參數(shù):function -- 函數(shù),有兩個(gè)參數(shù)。iterable -- 可迭代對象。initializer -- 可選,初始參數(shù)
實(shí)例
>>>def add(x, y) : # 兩數(shù)相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 計(jì)算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數(shù)
15
>>> def f(a,b):
... return a+b
...
>>> print reduce(f,[1,2,3,4],10) #1+2+3+4+10.這里的第三個(gè)參數(shù)是做為初始值的。
20
#注意:reduce在3.0里已經(jīng)已經(jīng)由一個(gè)內(nèi)置方法移到標(biāo)準(zhǔn)庫里了,3.0里調(diào)用reduce必須import functools,3.0里使用方法如下
>>>import functools
>>>res = functools.reduce(lambda x, y: x+y, [1,2,3,4,5])
>>>print res
sorted函數(shù)
sort 與 sorted 區(qū)別:
sort 是應(yīng)用在 list 上的方法,sorted 可以對所有可迭代的對象進(jìn)行排序操作。
list 的 sort 方法返回的是對已經(jīng)存在的列表進(jìn)行操作,無返回值,而內(nèi)建函數(shù) sorted 方法返回的是一個(gè)新的 list,而不是在原來的基礎(chǔ)上進(jìn)行的操作。
- 語法:sorted(iterable[, cmp[, key[, reverse]]])
- 參數(shù):
iterable -- 可迭代對象。
cmp -- 比較的函數(shù),這個(gè)具有兩個(gè)參數(shù),參數(shù)的值都是從可迭代對象中取出,此函數(shù)必須遵守的規(guī)則為,大于則返回1,小于則返回-1,等于則返回0。
key -- 主要是用來進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對象中,指定可迭代對象中的一個(gè)元素來進(jìn)行排序。
reverse -- 排序規(guī)則,reverse = True 降序 , reverse = False 升序(默認(rèn))。- 返回值:返回重新排序的列表。
實(shí)例
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函數(shù)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年齡排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。