深度剖析Python函數(shù)編程技巧
在Python函數(shù)編程里面, 我們可以定義匿名函數(shù),也可以把函數(shù)賦值給一個(gè)變量或作為參數(shù)傳遞給另外一個(gè)函數(shù),以遠(yuǎn)低于Java編輯-編譯-測(cè)試的開(kāi)發(fā)時(shí)間提升Java類(lèi)庫(kù)的運(yùn)用,代碼如下所示:
- >>> f=lambda(n):n**2
- >>> f(6)
- 36
- >>> f=lambda(n):lambda(m):n*m
- >>> g=f(5) #相當(dāng)與g=lambda(m):5*m
- >>> g(9) #相當(dāng)于5*9
- 45
lambda定義的匿名函數(shù)可以引用外圍函數(shù)的變量,上面的代碼中,第二個(gè)lambda表達(dá)式定義的匿名函數(shù)引用了第一個(gè)匿名函數(shù)的參數(shù)n,因?yàn)榈谝粋€(gè)匿名函數(shù)是第二個(gè)匿名函數(shù)的外圍函數(shù)。
除了lambda表達(dá)式之外,python還支持將函數(shù)作為參數(shù)傳遞給另外一個(gè)函數(shù),有點(diǎn)類(lèi)似于C語(yǔ)言中的函數(shù)指針,Python函數(shù)編程內(nèi)建的函數(shù)filter,map,reduce就可以接受函數(shù)參數(shù)。
filter(function, sequence)會(huì)遍歷sequence中的每一個(gè)item,并以該item為參數(shù)調(diào)用function,如果function返回ture,就將該item加到結(jié)果sequence中,這就達(dá)到過(guò)濾sequence的效果,作為參數(shù)的function就是過(guò)濾的條件,例子如下:
- >>> def add(x,y):
- return x+y
- >>> reduce(add,range(1,10))
- 45
IT部分通常要完成的任務(wù)相當(dāng)繁重但支撐這些工作的資源卻很少,這已經(jīng)成為公開(kāi)的秘密。任何承諾提高編碼效率、降低軟件總成本的IT解決方案都應(yīng)該進(jìn)行 周到的考慮。Python所具有的一個(gè)顯著優(yōu)勢(shì)就是可以在企業(yè)的軟件創(chuàng)建和維護(hù)階段節(jié)約大量資金,而這兩個(gè)階段的軟件成本占到了軟件整個(gè)生命周期中總成本 的50%到95%。
Python清晰可讀的語(yǔ)法使得軟件代碼具有異乎尋常的易讀性,甚至對(duì)那些不是最初接觸和開(kāi)發(fā)原始項(xiàng)目的程序員都 能具有這樣的強(qiáng)烈感覺(jué)。雖然某些程序員反對(duì)在Python代碼中大量使用空格。
不過(guò),幾乎人人都承認(rèn)Python代碼的可讀性遠(yuǎn)勝于C或者Java,后兩 者都采用了專(zhuān)門(mén)的字符標(biāo)記代碼塊結(jié)構(gòu)、循環(huán)、函數(shù)以及其他編程結(jié)構(gòu)的開(kāi)始和結(jié)束。提倡Python的人還宣稱(chēng),采用這些字符可能會(huì)產(chǎn)生顯著的編程風(fēng)格差 異,使得那些負(fù)責(zé)維護(hù)代碼的人遭遇代碼可讀性方面的困難。
Python明晰的語(yǔ)法使其成為一種學(xué)習(xí)曲線平和的編程語(yǔ)言。有經(jīng)驗(yàn)的程序員甚至可能在一天之內(nèi)就掌握Python的基礎(chǔ)知識(shí),至多不過(guò)一周作用就可以上手,而編程語(yǔ)言的專(zhuān)家則肯定會(huì)比他掌握C、C++、Java甚至Perl要快很多。
Python函數(shù)編程因其語(yǔ)法的明晰而獲得的最大好處或許該算是開(kāi)發(fā)時(shí)間的大大降低了。一名從事企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)工作的開(kāi)發(fā)人員告訴我,他所在單位的開(kāi)發(fā)時(shí)間 因?yàn)?FONT>Python的采用而大大節(jié)約。#t#
同時(shí)卻并沒(méi)有給軟件性能帶來(lái)任何負(fù)面影響,他說(shuō):“就我們的業(yè)務(wù)而言,快速地開(kāi)發(fā)出新產(chǎn)品比開(kāi)發(fā)出性能驚人的軟件產(chǎn)品 要重要得多,開(kāi)發(fā)時(shí)間相比軟件的優(yōu)化要貴得多(以每小時(shí)計(jì)算)。
對(duì)開(kāi)發(fā)速度采用何種評(píng)價(jià)標(biāo)準(zhǔn)一直是個(gè)很難確定的問(wèn)題,不過(guò)通常情況下,普遍認(rèn)為開(kāi)發(fā)Python應(yīng)用程序的速度大約是用Java開(kāi)發(fā)同類(lèi)應(yīng)用程序速度的10倍。要是相比C/C++節(jié)約的時(shí)間就更多了。