學(xué)習(xí)Python有一段時(shí)間了,期間參考了很多大神的Python文章,主要因?yàn)樽约旱挠?jì)算機(jī)基礎(chǔ)不是很好,學(xué)的時(shí)候有點(diǎn)磕磕絆絆,但是一道走來,總算覺得自己算是有點(diǎn)兒入門了。因此,總結(jié)一下自己的心得體會和學(xué)習(xí)過程,希望能寫出一個(gè)系列文章,與眾多希望自學(xué)Python的新手共享,希望能讓大家少走一些彎路。
2.1編程范型:函數(shù)式和面向?qū)ο笫?/p>
編寫計(jì)算機(jī)程序的范型常見的有函數(shù)式和面向?qū)ο笫絻煞N,Python的實(shí)際應(yīng)用中這兩種范型常常是混合使用的。函數(shù)式編程范型出現(xiàn)的時(shí)間較早,在這種編程范型下,常常把將要反復(fù)使用的程序代碼用函數(shù)封裝起來,需要使用時(shí)對其進(jìn)行調(diào)用。比如,下面的Python代碼實(shí)現(xiàn)了數(shù)學(xué)中求絕對值的功能:
defmy_abs(number):#函數(shù)頭格式:def函數(shù)名(參數(shù)列表):
ifnumber<0.0:return-number#返回值
else:returnnumber#返回值
這樣,每當(dāng)我們需要求一個(gè)數(shù)的絕對值時(shí),只要如下調(diào)用就可以了:
f=-0.5
abs_f=my_abs(f)
print(abs)
它運(yùn)行的結(jié)果是:
$0.5
從上面的例子中可見,函數(shù)式編程把函數(shù)看作一種操作(或運(yùn)算),操作的步驟和方法封裝在函數(shù)中,一旦確定,就不可更改,而操作中可變的部分,稱作參數(shù),以函數(shù)參數(shù)的方式傳遞,函數(shù)參數(shù)可以改變函數(shù)運(yùn)行的結(jié)果,但是不能改變函數(shù)運(yùn)行的步驟和運(yùn)算的方法。可以用返回值表示函數(shù)運(yùn)算的結(jié)果,這個(gè)返回值作為函數(shù)的值可以賦給別的變量。函數(shù)也可以沒有返回值(這時(shí)返回值默認(rèn)為Python常量None),這時(shí)它們只是對于給定的參數(shù)執(zhí)行固定的操作步驟。
面向?qū)ο笫骄幊淌呛瘮?shù)式編程之后出現(xiàn)的一種編程范型,可以用現(xiàn)實(shí)世界中的電視機(jī)作為例子進(jìn)行類比。電視機(jī)作為一個(gè)抽象概念,我們都知道它是什么含義,但某個(gè)型號的電視機(jī)屏幕的大小、材質(zhì);電路板的品牌、型號;外殼的大小、材質(zhì)….;如何選臺、如何調(diào)節(jié)亮度、如何調(diào)節(jié)音量等細(xì)節(jié)是由該型號的電視機(jī)生產(chǎn)方案和模具等決定的。而一臺這種型號的電視機(jī)生產(chǎn)出來,進(jìn)入家庭以后,它正在收看什么節(jié)目、屏幕的亮度、色彩、揚(yáng)聲器的音量等參數(shù)由每個(gè)家庭通過操作遙控器進(jìn)行設(shè)定,它們之間各不相關(guān)。當(dāng)我們需要對電視生產(chǎn)過程設(shè)計(jì)一個(gè)程序時(shí),這個(gè)例子中的電視機(jī)作為源頭上的概念,可以作為一個(gè)基類(父類)實(shí)現(xiàn):它規(guī)定了電視機(jī)都有屏幕、電路板、外殼、揚(yáng)聲器、遙控器、電源…。某個(gè)型號的電視機(jī)生產(chǎn)方案和模具,可以作為電視機(jī)基類的派生類(子類)實(shí)現(xiàn),它規(guī)定了該型號電視機(jī)共有的物理特征、出廠狀態(tài)以及對該型號電視機(jī)可執(zhí)行的操作。通過對電視機(jī)生產(chǎn)方案的實(shí)施,可以將該類實(shí)例化,形成一個(gè)個(gè)對象,即一臺臺電視機(jī),可以對每臺電視機(jī)進(jìn)行分別操作實(shí)現(xiàn)選臺、調(diào)節(jié)亮度、調(diào)節(jié)音量等操作,電視機(jī)會記住這些狀態(tài)。
從上面的例子中,我們可以看到,面向?qū)ο笫骄幊躺婕暗搅祟惡蛯ο髢蓚€(gè)概念,它的特點(diǎn)是把程序所要處理的某類對象抽象出來,編寫成表示一個(gè)類的代碼。這個(gè)類可以含有表示狀態(tài)的數(shù)據(jù)和表示操作的代碼。編碼時(shí),對這個(gè)類進(jìn)行實(shí)例化,形成一個(gè)具體的對象,對于這個(gè)對象,可以有自己獨(dú)特的狀態(tài)和操作,而根據(jù)該類實(shí)例化的對象之間的狀態(tài)值和操作值可以不同。編碼時(shí),我們常用屬于該對象的變量表示狀態(tài),用屬于該對象的函數(shù)表示操作。可見,面向?qū)ο缶幊绦枰玫胶瘮?shù)式編程的概念和成果。
由于面向?qū)ο笫骄幊梯^為復(fù)雜,我們在本教程中只講解函數(shù)式編程。需要知道的是,由于Python本身的特點(diǎn):Python中的任何事物都是對象。所以,即使只講函數(shù)式編程,也會涉及不少的面向?qū)ο蟮闹R。同時(shí),即使我們著重于講述函數(shù)式編程,它也有足夠的能力完成相當(dāng)復(fù)雜的任務(wù)。
2.2一個(gè)函數(shù)式程序的例子
科學(xué)中,常常用到攝氏溫度到華氏溫度的轉(zhuǎn)換。我們編寫一個(gè)Python代碼實(shí)現(xiàn)它:
#代碼2.1攝氏溫度到華氏溫度的轉(zhuǎn)換
#coding:utf-8#程序中使用中文需要用到這行代碼
defft_from_ct(ct):#參數(shù):ct表示攝氏溫度
returnct*9.0/5+32
#攝氏溫度0-100轉(zhuǎn)換為華氏溫度,間隔10攝氏度
print("攝氏溫度華氏溫度")
forctinrange(0,101,10):
print("{0:8d}--{1:6.2f}".format(ct,ft_from_ct(ct))
在這個(gè)短小的代碼中,已有豐富的內(nèi)容,且讓我一一道來。
第1行注釋,以#開頭,到本行結(jié)束為止,都是注釋。注釋可以像第3行那樣從代碼的尾部開始
第2行#coding:utf-8說明程序代碼使用了Unicode字符,這個(gè)東東可以讓Python程序使用中文
第3行函數(shù)頭,格式為def函數(shù)名(參數(shù)列表):
第4行這行有縮進(jìn),4個(gè)空格字符,Python用縮進(jìn)表示程序結(jié)構(gòu),同級縮進(jìn)表示同級代碼。本行代碼是函數(shù)ft_from_ct()的代碼,表示返回計(jì)算式的結(jié)果
第6行注釋
第7行輸出雙引號括起的字符串
第8行for循環(huán),這是循環(huán)頭,表示對range(0,101,10)中的每個(gè)取值ct進(jìn)行循環(huán)操作。range(0,101,10)也是一個(gè)函數(shù),它的運(yùn)算結(jié)果為從0開始取值,步長為10,到101為止,但不包括101,即[0,10,20,30,40,50,60,70,80,100]。
第9行for循環(huán)的循環(huán)體,同樣有縮進(jìn),按格式輸出攝氏溫度和對應(yīng)的華氏溫度
Python中的函數(shù)式編程模式基本上就是像上面這樣了,實(shí)際應(yīng)用中一般還會導(dǎo)入函數(shù)庫和使用分支語句、循環(huán)語句,并且常常會用到分支語句、循環(huán)語句的嵌套,內(nèi)置函數(shù)、庫函數(shù)、自定義的函數(shù)和函數(shù)調(diào)用也會多一些,但基本結(jié)構(gòu)就是如這個(gè)例子所述。
以上內(nèi)容為大家介紹了Python程序的常見編程范型,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.fengjieshuijing.cn/