官术网_书友最值得收藏!

第6章 函數(shù)

6.1 Python的樂高積木

視頻講解

小時(shí)候大家應(yīng)該都玩過樂高積木,只要通過想象和創(chuàng)意,就可以用它拼湊出很多神奇的東西。隨著學(xué)習(xí)的深入,編寫的代碼量不斷增加,結(jié)構(gòu)也日益復(fù)雜。需要找一個(gè)方法對(duì)這些復(fù)雜的代碼進(jìn)行重新打包整理,以降低代碼結(jié)構(gòu)的復(fù)雜性和冗雜度。

優(yōu)秀的東西永遠(yuǎn)是經(jīng)典的,而經(jīng)典的東西永遠(yuǎn)是簡單的。不是說復(fù)雜不好,但只有把復(fù)雜的東西簡單化才能成為經(jīng)典。為了使得程序的代碼變得簡單,需要把程序分解成較小的組成部分。這里會(huì)教大家三種方法來實(shí)現(xiàn),分別是函數(shù)、對(duì)象和模塊。

6.1.1 創(chuàng)建和調(diào)用函數(shù)

函數(shù)就是把代碼打包成不同形狀的樂高積木,以便可以發(fā)揮想象力進(jìn)行隨意拼裝和反復(fù)使用。此前接觸的BIF就是Python幫我們封裝好的函數(shù),用的時(shí)候很方便,根本不需要去想實(shí)現(xiàn)的原理,這就是把復(fù)雜變簡單。

因?yàn)榛A(chǔ)內(nèi)容奠定了Python編程的基本功底,所以小甲魚在這些內(nèi)容的準(zhǔn)備上是花足了心思的,大家不要嫌啰唆,經(jīng)常變著花樣兒重復(fù)出現(xiàn)的內(nèi)容肯定是最重要的!

簡單來講,一個(gè)程序可以按照不同功能的實(shí)現(xiàn),分割成許許多多的代碼塊,每一個(gè)代碼塊就可以封裝成一個(gè)函數(shù)。在Python中創(chuàng)建一個(gè)函數(shù)用def關(guān)鍵字:

注意:

在函數(shù)名后面要加上一對(duì)小括號(hào)。這對(duì)小括號(hào)是必不可少的,因?yàn)橛袝r(shí)候需要在里邊放點(diǎn)東西,至于放什么,小甲魚先賣個(gè)關(guān)子,待會(huì)兒告訴你。

我們創(chuàng)建了一個(gè)函數(shù),但是從來都不去調(diào)用它,那么這個(gè)函數(shù)里的代碼就永遠(yuǎn)也不會(huì)被執(zhí)行。這里教大家如何調(diào)用一個(gè)函數(shù),調(diào)用一個(gè)函數(shù)也非常簡單,直接寫出函數(shù)名加上小括號(hào)即可:

     >>> myFirstFunction()
     這是我創(chuàng)建的第一個(gè)函數(shù)!
     我表示很激動(dòng)…
     在這里,我要感謝TBB,感謝CCAV!

函數(shù)的調(diào)用和運(yùn)行機(jī)制:當(dāng)函數(shù)myFirstFunction()發(fā)生調(diào)用操作的時(shí)候,Python會(huì)自動(dòng)往上找到def myFirstFunction()的定義過程,然后依次執(zhí)行該函數(shù)所包含的代碼塊部分(也就是冒號(hào)后面的縮進(jìn)部分內(nèi)容)。只需要一條語句,就可以輕松地實(shí)現(xiàn)函數(shù)內(nèi)的所有功能。假如想把剛才的內(nèi)容打印3次,只需要調(diào)用3次函數(shù)即可:

6.1.2 函數(shù)的參數(shù)

現(xiàn)在可以來談?wù)劺ㄌ?hào)里是什么東西了。其實(shí)括號(hào)里放的就是函數(shù)的參數(shù),在函數(shù)剛開始被發(fā)明出來的時(shí)候,是沒有參數(shù)的(也就是說,小括號(hào)里沒有內(nèi)容),很快就引來了許多小伙伴們的質(zhì)疑:函數(shù)不過是對(duì)做同樣內(nèi)容的代碼進(jìn)行打包,這樣與使用循環(huán)就沒有什么本質(zhì)不同了。

因此,為了使每次調(diào)用的函數(shù)可以有不同的實(shí)現(xiàn),加入了參數(shù)的概念。例如,封裝了一個(gè)開炮功能的函數(shù),默認(rèn)武器是大炮,那用來打飛機(jī)是沒問題的,但是如果用這個(gè)函數(shù)來打小鳥,除非是憤怒的小鳥,否則就有點(diǎn)奇葩了。有了參數(shù)的實(shí)現(xiàn),就可以輕松地將大炮換成步槍。總而言之,參數(shù)就是使得函數(shù)可以實(shí)現(xiàn)個(gè)性化:

剛才的例子只有一個(gè)參數(shù),使用多個(gè)參數(shù),只需要使用逗號(hào)隔開即可:

可能有讀者要問了,Python的函數(shù)支持多少個(gè)參數(shù)呢?實(shí)際上你想要有多少個(gè)參數(shù)就可以有多少個(gè),就像Windows的某些API函數(shù)就有十幾個(gè)參數(shù)。但是建議大家自己定義的函數(shù)參數(shù)盡量不要太多,函數(shù)的功能和參數(shù)的意義也要相應(yīng)寫好注釋,這樣別人來維護(hù)你的程序才不會(huì)那么費(fèi)勁!謹(jǐn)記奧卡姆剃刀原理:如無必要,勿增實(shí)體。

6.1.3 函數(shù)的返回值

有些時(shí)候,需要函數(shù)返回一些數(shù)據(jù)來報(bào)告執(zhí)行的結(jié)果,比如剛才提到的具有“打炮彈”功能的函數(shù),炮彈是否發(fā)射成功,總得有個(gè)交代吧。所以,函數(shù)需要返回值。其實(shí)也非常簡單,只需要在函數(shù)中使用關(guān)鍵字return,后面跟著的就是指定要返回的值。

在Python中,并不需要定義函數(shù)的返回值類型,函數(shù)可以返回不同類型的值;而如果沒有返回值,則默認(rèn)返回None。

另外,如果返回了多個(gè)值,Python默認(rèn)是以元組的形式進(jìn)行打包。

當(dāng)然,也可以利用列表將多種類型的值打包到一塊兒再返回。

主站蜘蛛池模板: 红桥区| 巴彦淖尔市| 丰宁| 清水河县| 卢龙县| 洛川县| 久治县| 云和县| 开原市| 商水县| 察雅县| 乳源| 嘉定区| 仁化县| 阜宁县| 峡江县| 雷州市| 彭州市| 荥阳市| 三原县| 谢通门县| 全椒县| 铜山县| 阳西县| 安仁县| 陕西省| 达孜县| 台中县| 连州市| 郴州市| 芮城县| 镇平县| 黄骅市| 菏泽市| 万源市| 如东县| 大足县| 保亭| 治县。| 阳曲县| 福清市|