![中職電子與信息:《yhon小屋》3-3-1 基本語(yǔ)法_第1頁(yè)](http://file4.renrendoc.com/view/8eae87d7b3348e5f8cb10e3bfe043a07/8eae87d7b3348e5f8cb10e3bfe043a071.gif)
![中職電子與信息:《yhon小屋》3-3-1 基本語(yǔ)法_第2頁(yè)](http://file4.renrendoc.com/view/8eae87d7b3348e5f8cb10e3bfe043a07/8eae87d7b3348e5f8cb10e3bfe043a072.gif)
![中職電子與信息:《yhon小屋》3-3-1 基本語(yǔ)法_第3頁(yè)](http://file4.renrendoc.com/view/8eae87d7b3348e5f8cb10e3bfe043a07/8eae87d7b3348e5f8cb10e3bfe043a073.gif)
![中職電子與信息:《yhon小屋》3-3-1 基本語(yǔ)法_第4頁(yè)](http://file4.renrendoc.com/view/8eae87d7b3348e5f8cb10e3bfe043a07/8eae87d7b3348e5f8cb10e3bfe043a074.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python小屋》之三程序控制結(jié)構(gòu)與函數(shù)設(shè)計(jì)3.3函數(shù)設(shè)計(jì)與使用大家在初中數(shù)學(xué)課程中就有學(xué)習(xí)過(guò)函數(shù)的概念,函數(shù)表示從自變量到因變量之間的一-種映射或?qū)?yīng)關(guān)系。軟件開發(fā)中的函數(shù)也具有相似的含義,也是把輸入經(jīng)過(guò)一定的變換和處理最后得到預(yù)訂的輸出。從外部看,函數(shù)就像一個(gè)黑盒子,不需要了解內(nèi)部原理,值需要了解其接口或使用方法即可。在軟件開發(fā)過(guò)程中,經(jīng)常有很多操作是完全相同或者是非常相似的,僅僅是要處理的數(shù)據(jù)不同而已,因此經(jīng)常在不同的代碼位置多次執(zhí)行相似或完全相同的代碼塊。很顯然,從軟件設(shè)計(jì)和代碼復(fù)用的角度來(lái)講,直接將該代碼塊復(fù)制到多個(gè)相應(yīng)位置然后進(jìn)行簡(jiǎn)單修改絕對(duì)不是一個(gè)好主意。雖然這樣可以使得多份復(fù)制的買嗎可以彼此獨(dú)立的進(jìn)行修改,單這樣不僅增加了代碼最,也增加了代碼閱讀、理解和維護(hù)的難度,更重要的是為代碼測(cè)試和糾錯(cuò)帶來(lái)了很大的困難。一旦被復(fù)制的代碼塊將來(lái)某天被發(fā)現(xiàn)存在問題而需要修改,則必須對(duì)所有的復(fù)制都做同樣正確的修改,這在實(shí)際中是很難完成的意向任務(wù)。由于代碼量的大幅度增加,導(dǎo)致代碼之間的關(guān)系更加復(fù)雜,很可能在修補(bǔ)就漏洞的同事又引入了新漏洞。因此,應(yīng)盡量減少使用直接復(fù)制代碼塊的方式來(lái)實(shí)現(xiàn)復(fù)用。解決這個(gè)問題的郵箱方法是設(shè)計(jì)函數(shù)(function)和類(class)。將可能反復(fù)執(zhí)行的代碼封裝為函數(shù),并在需要執(zhí)行該段代碼功能的地方進(jìn)行調(diào)用,這不僅可以實(shí)現(xiàn)代碼的復(fù)用,更重要的是可以保證代碼的一致性,只需要修改該函數(shù)代碼則所有調(diào)用位置均得到體現(xiàn)。同事,把大任務(wù)拆分成多個(gè)函數(shù)也是分治法的經(jīng)典應(yīng)用,復(fù)雜問題簡(jiǎn)單化,使得軟件開發(fā)像搭積木一樣簡(jiǎn)單。淡然,在實(shí)際開發(fā)中,需要對(duì)函數(shù)進(jìn)行良好的設(shè)計(jì)和優(yōu)化才能充分發(fā)揮其優(yōu)勢(shì)。在編寫函數(shù)時(shí),有很多原則需要參考和遵守,例如,不要在用以函數(shù)中執(zhí)行太多的功能,盡量只讓其完成一個(gè)高度相關(guān)且大小合適的功能,以提高模塊的內(nèi)聚行。另外,盡量減少不同函數(shù)之間的隱式耦合,例如減少全局變量的使用,是的函數(shù)之間僅通過(guò)調(diào)用和參數(shù)傳遞來(lái)顯式體現(xiàn)其相互關(guān)系?;菊Z(yǔ)法在Python中,定義函數(shù)的語(yǔ)法如下:ldef函數(shù)名([參數(shù)列表]):“‘注釋"'函數(shù)體代碼塊在Python中使用def關(guān)鍵字來(lái)定義函數(shù),然后是一個(gè)空格和函數(shù)名稱,接下來(lái)是一對(duì)圓括號(hào),在圓括號(hào)內(nèi)是形式參數(shù)列表,如果有多個(gè)參數(shù)則使用逗號(hào)分隔開,圓括號(hào)之后是一個(gè)冒號(hào)和換行,最后是必要的注釋和函數(shù)體代碼。定義函數(shù)時(shí)需要注意的問題:(1)函數(shù)參數(shù)不需要聲明其類型,也不需要指定函數(shù)返回值類型;(2)即使該函數(shù)不需要接受任何參數(shù),也必須保留一對(duì)空的圓括號(hào);(3)括號(hào)后面的冒號(hào)必不可少;(4)函數(shù)體相對(duì)于def關(guān)鍵字必須保持一定的空格縮進(jìn)。小提示:注釋是軟件開發(fā)人員的筆記,對(duì)代碼測(cè)試人員和維護(hù)人員來(lái)說(shuō)也非常重要。在Python中有兩種注釋方式:符號(hào)#后面的內(nèi)容表示注秤,不屬于任何語(yǔ)句的一對(duì)三引號(hào)也表示注釋。小技巧:不少程序員是編寫完代碼之后再添加適當(dāng)?shù)淖⑨?,我恰恰相反。我一般都是先寫注釋,以注釋的形式用自然語(yǔ)言把程序思路描述出來(lái),然后再把這些注釋“翻譯”成程序語(yǔ)言,正所謂“代碼未動(dòng),注釋先行二下面的函數(shù)用來(lái)計(jì)算斐波那契數(shù)列中小于參數(shù)n的所有值:Ideffib(n):~#定義函數(shù),括號(hào)里的n是形式參數(shù)a,b=l,lwhilea<n:ifb<n:a,b=b,a+belse:print(a)breaklOfib(lOOO)#調(diào)用函數(shù),括號(hào)里的1000是實(shí)參1112#函數(shù)執(zhí)行結(jié)果:987代碼塊在定義函數(shù)時(shí),開頭部分的注釋不是必須的,但是如果為函數(shù)的定義加上一段注釋的話,可以為用戶提供友好的提示和使用幫助。例如,把上面生成斐波那契的函數(shù)定義加上如下注釋:"'acceptanintegern.returnthenumberslessthanninFibonaccisequence.'"如此一來(lái),可以使用內(nèi)置函數(shù)help。來(lái)查看函數(shù)的使用幫助,并且在調(diào)用該函數(shù)時(shí)輸入左側(cè)圓括號(hào)之后,立刻就會(huì)得到該函數(shù)的使用說(shuō)明。print(fib._doc_)print('-,*30)help(fib)acceptanintegern.returnthenumberslessthanninFibonaccisequence.Helponfunctionfibinmodule_main_:llfib(n)acceptanintegern.returnthenumberslessthanninFibonaccisequence.代碼塊建議:如果代碼本身不能提供非常好的可讀性,那么最好加上適當(dāng)?shù)淖⑨寔?lái)說(shuō)明,要不然,自己寫的代碼自己都看不懂了。很多程序員都有過(guò)這樣的經(jīng)歷。在Python中,定義函數(shù)時(shí)不需要聲明函數(shù)返回值的類型,而是使用return語(yǔ)句結(jié)束函數(shù)的執(zhí)行的同時(shí)返回任意類型的值,函數(shù)返回值類型與return語(yǔ)句返回表達(dá)式的類型一致。無(wú)論return語(yǔ)句出現(xiàn)在函數(shù)的任何位置,一旦得到執(zhí)行將直接結(jié)束函數(shù)的執(zhí)行。如果函數(shù)沒有return語(yǔ)句或者執(zhí)行了不返回任何值的return語(yǔ)句,Python將認(rèn)為該函數(shù)以returnNone結(jié)束,即返回空值。小提示:作為使用者,在調(diào)用函數(shù)時(shí),一定要注意函數(shù)有沒有返回值,以及是否會(huì)對(duì)函數(shù)實(shí)參的值進(jìn)行修改。例如,前面介紹的列表方法sort()屬于原地操作,沒有返回值,而內(nèi)置函數(shù)sorted。則返回排序后的序列,并不對(duì)原列表做任何修改。1?>a=[1Z2,3A9,5,7]?>print(sorted(a))[1,2,3,4,5,7,9]?>?>a[1,2,3,4,9,5,7]#原列表內(nèi)容沒變7?>?>print(a.sort())#列表對(duì)象的sort()方法沒有返回值None?>?>print(a)口,2,3,4,5,7,9]?>代碼塊擴(kuò)展知識(shí):函數(shù)屬于可調(diào)用對(duì)象。由于構(gòu)造函數(shù)的存在,類也是可調(diào)用的。另外,任何包含call()方法的類的對(duì)象都是可調(diào)用的。例如,下面的代碼演示了函數(shù)嵌套定義情況:deflinear(a,b):defresult(x):ttfF.Python41,函數(shù)是可以使用嵌套定義的returna*x+breturnresult6#下面的代碼演示了可調(diào)用對(duì)象類的定義:classlinear:def_init_(self,a,b):self.a=aself.b=bdef_call_(self,x):14returnself.a*x+self.b1516#使用上面的嵌套函數(shù)和類這兩種方式中任何一個(gè),都可以通過(guò)以下的方式來(lái)定義一個(gè)可調(diào)用對(duì)象:1718taxes=linear(0.3,2)1920#然后通過(guò)下面的方式來(lái)調(diào)用該對(duì)象:2122taxes(5)2324#下面的代碼完整地演示了嵌套函數(shù)定義與使用的方法,有效利用了用戶名檢查功能的代碼,關(guān)于面向?qū)ο缶幊痰闹R(shí)請(qǐng)參考第4章。2526defcheck_permission(func):27defwrapper(*args,**kwargs):28ifkwargs.getCusername')!='admin':29raiseException('Sorry.Youarenotallowed.')30returnfunc(*args,**kwargs)31returnwrapper3233classReadWriteFile():3435@check_permission36defread(self,username,filename):37returnopen(filename,'r').read()3839defwrite(self,username,filename,content):40open(filename/a+').write(content)4142#把函數(shù)check_permission作為普通函數(shù)使用43write=check_permission(write)4445if_name_=='_main_46t=ReadWriteFilef)47print('Originally')48print(t.read(username=,admin'zfilename=r'd:\sample.txt,))49print('Now,trytowritetoafile...,)50t.write(username='admin,/filename=r,d:\sample.txt,,content=,\nhelloworld')
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)鍛造熱擠壓用感應(yīng)加熱設(shè)備行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)警告燈行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年蓋諾真項(xiàng)目可行性研究報(bào)告
- 2025年樓梯電燈開關(guān)項(xiàng)目可行性研究報(bào)告
- 2025年旋轉(zhuǎn)發(fā)電手電筒項(xiàng)目可行性研究報(bào)告
- 2025年帶EL背光源鍵盤項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)印鐵桶行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年刃銑刀項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)HDPE大口徑纏繞管生產(chǎn)線數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年首飾包裝物項(xiàng)目投資價(jià)值分析報(bào)告
- 機(jī)器狗:技術(shù)成熟性能優(yōu)越場(chǎng)景剛需放量在即2025
- 2025年村民代表會(huì)議講話稿(3篇)
- 年度得到 · 沈祖蕓全球教育報(bào)告(2024-2025)
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 人工智能大模型
- 畢業(yè)設(shè)計(jì)鋼筋彎曲機(jī)的結(jié)構(gòu)設(shè)計(jì)
- 超全六年級(jí)陰影部分的面積(詳細(xì)答案)
- 提高護(hù)士對(duì)搶救藥品知曉率PDCA案例精編版
- 八字萬(wàn)能速查表(有圖)
- 架橋機(jī)安全教育培訓(xùn)試卷及答案(共3頁(yè))
- 通信桿路工程施工
評(píng)論
0/150
提交評(píng)論