- 零基礎(chǔ)入門學(xué)習(xí)Python(第2版)
- 小甲魚
- 5字
- 2019-12-20 12:19:39
第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)然,也可以利用列表將多種類型的值打包到一塊兒再返回。

- PostgreSQL for Data Architects
- Learning Elixir
- Mastering PHP Design Patterns
- YARN Essentials
- C語言從入門到精通(第4版)
- Hands-On RESTful Web Services with Go
- HTML5 and CSS3 Transition,Transformation,and Animation
- SQL Server 2012數(shù)據(jù)庫管理與開發(fā)項(xiàng)目教程
- 單片機(jī)應(yīng)用與調(diào)試項(xiàng)目教程(C語言版)
- Web Development with MongoDB and Node(Third Edition)
- Machine Learning for Developers
- Learning iOS Security
- 從零開始:C語言快速入門教程
- Clojure Web Development Essentials
- 可視化H5頁面設(shè)計(jì)與制作:Mugeda標(biāo)準(zhǔn)教程