給大家分享一篇Python進(jìn)階 函數(shù)對(duì)象

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載皂贩,也請(qǐng)保留這段聲明。謝謝!

秉承著一切皆對(duì)象的理念,我們?cè)俅位仡^來(lái)看函數(shù)(function)题翰。函數(shù)也是一個(gè)對(duì)象,具有屬性(可以使用dir()查詢)诈胜。作為對(duì)象豹障,它還可以賦值給其它對(duì)象名,或者作為參數(shù)傳遞焦匈。

lambda函數(shù)

在展開之前血公,我們先提一下lambda函數(shù)』菏欤可以利用lambda函數(shù)的語(yǔ)法累魔,定義函數(shù)。lambda例子如下:

func = lambda x,y: x + y
print func(3,4)

lambda生成一個(gè)函數(shù)對(duì)象够滑。該函數(shù)參數(shù)為x,y垦写,返回值為x+y。函數(shù)對(duì)象賦給func版述。func的調(diào)用與正常函數(shù)無(wú)異。

以上定義可以寫成以下形式:

def func(x, y):
    return x + y

函數(shù)作為參數(shù)傳遞

函數(shù)可以作為一個(gè)對(duì)象寞冯,進(jìn)行參數(shù)傳遞渴析。函數(shù)名(比如func)即該對(duì)象。比如說(shuō):

def test(f, a, b):
    print 'test'
    print f(a, b)

test(func, 3, 5)

test函數(shù)的第一個(gè)參數(shù)f就是一個(gè)函數(shù)對(duì)象吮龄。將func傳遞給f俭茧,test中的f()就擁有了func()的功能。

我們因此可以提高程序的靈活性漓帚∧刚可以使用上面的test函數(shù),帶入不同的函數(shù)參數(shù)。比如:

test((lambda x,y: x**2 + y), 6, 9)
 

map()函數(shù)

map()是Python的內(nèi)置函數(shù)毡们。它的第一個(gè)參數(shù)是一個(gè)函數(shù)對(duì)象迅皇。

re = map((lambda x: x+3),[1,3,5,6])

這里,map()有兩個(gè)參數(shù)衙熔,一個(gè)是lambda所定義的函數(shù)對(duì)象登颓,一個(gè)是包含有多個(gè)元素的表。map()的功能是將函數(shù)對(duì)象依次作用于表的每一個(gè)元素红氯,每次作用的結(jié)果儲(chǔ)存于返回的表re中框咙。map通過(guò)讀入的函數(shù)(這里是lambda函數(shù))來(lái)操作數(shù)據(jù)(這里“數(shù)據(jù)”是表中的每一個(gè)元素,“操作”是對(duì)每個(gè)數(shù)據(jù)加3)痢甘。

在Python 3.X中喇嘱,map()的返回值是一個(gè)循環(huán)對(duì)象∪ぃ可以利用list()函數(shù)者铜,將該循環(huán)對(duì)象轉(zhuǎn)換成表。

如果作為參數(shù)的函數(shù)對(duì)象有多個(gè)參數(shù)构蹬,可使用下面的方式王暗,向map()傳遞函數(shù)參數(shù)的多個(gè)參數(shù):

re = map((lambda x,y: x+y),[1,2,3],[6,7,9])
map()將每次從兩個(gè)表中分別取出一個(gè)元素,帶入lambda所定義的函數(shù)庄敛。

filter()函數(shù)

filter函數(shù)的第一個(gè)參數(shù)也是一個(gè)函數(shù)對(duì)象俗壹。它也是將作為參數(shù)的函數(shù)對(duì)象作用于多個(gè)元素。如果函數(shù)對(duì)象返回的是True藻烤,則該次的元素被儲(chǔ)存于返回的表中绷雏。filter通過(guò)讀入的函數(shù)來(lái)篩選數(shù)據(jù)。同樣怖亭,在Python 3.X中涎显,filter返回的不是表,而是循環(huán)對(duì)象兴猩。

filter函數(shù)的使用如下例:

def func(a):
    if a > 100:
        return True
    else:
        return False

print filter(func,[10,56,101,500])

reduce()函數(shù)

reduce函數(shù)的第一個(gè)參數(shù)也是函數(shù)期吓,但有一個(gè)要求,就是這個(gè)函數(shù)自身能接收兩個(gè)參數(shù)倾芝。reduce可以累進(jìn)地將函數(shù)作用于各個(gè)參數(shù)讨勤。如下例:

print reduce((lambda x,y: x+y),[1,2,5,7,9])
reduce的第一個(gè)參數(shù)是lambda函數(shù),它接收兩個(gè)參數(shù)x,y, 返回x+y晨另。

reduce將表中的前兩個(gè)元素(1和2)傳遞給lambda函數(shù)潭千,得到3。該返回值(3)將作為lambda函數(shù)的第一個(gè)參數(shù)借尿,而表中的下一個(gè)元素(5)作為lambda函數(shù)的第二個(gè)參數(shù)刨晴,進(jìn)行下一次的對(duì)lambda函數(shù)的調(diào)用屉来,得到8。依次調(diào)用lambda函數(shù)狈癞,每次lambda函數(shù)的第一個(gè)參數(shù)是上一次運(yùn)算結(jié)果茄靠,而第二個(gè)參數(shù)為表中的下一個(gè)元素,直到表中沒(méi)有剩余元素亿驾。

上面例子嘹黔,相當(dāng)于(((1+2)+5)+7)+9

根據(jù)mmufhy的提醒: reduce()函數(shù)在3.0里面不能直接用的,它被定義在了functools包里面莫瞬,需要引入包儡蔓,見評(píng)論區(qū)。

總結(jié)

函數(shù)是一個(gè)對(duì)象

用lambda定義函數(shù)

map()

filter()

reduce()

整理不易疼邀,如果覺得有所幫助喂江,希望可以留下您的精彩言論再走。趕快為你們最喜歡的框架打Call吧旁振。

大家如果想要學(xué)習(xí)Python可以加我的Qun:834179111获询,小編整理了2018最新的學(xué)習(xí)資料和大神分享直播。歡迎還沒(méi)有找到方向的小伙伴來(lái)學(xué)習(xí)拐袜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吉嚣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹬铺,更是在濱河造成了極大的恐慌尝哆,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甜攀,死亡現(xiàn)場(chǎng)離奇詭異秋泄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)规阀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門恒序,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人谁撼,你說(shuō)我怎么就攤上這事歧胁。” “怎么了厉碟?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵喊巍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我墨榄,道長(zhǎng)玄糟,這世上最難降的妖魔是什么勿她? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任袄秩,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘之剧。我一直安慰自己郭卫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布背稼。 她就那樣靜靜地躺著贰军,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟹肘。 梳的紋絲不亂的頭發(fā)上词疼,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音帘腹,去河邊找鬼贰盗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛阳欲,可吹牛的內(nèi)容都是我干的舵盈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼球化,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秽晚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起筒愚,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赴蝇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后锨能,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯再,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年址遇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熄阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倔约,死狀恐怖秃殉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浸剩,我是刑警寧澤钾军,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绢要,受9級(jí)特大地震影響吏恭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜重罪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一樱哼、第九天 我趴在偏房一處隱蔽的房頂上張望哀九。 院中可真熱鬧,春花似錦搅幅、人聲如沸阅束。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)息裸。三九已至,卻和暖如春沪编,著一層夾襖步出監(jiān)牢的瞬間呼盆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蚁廓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宿亡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓纳令,卻偏偏與公主長(zhǎng)得像挽荠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子平绩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容