Python語言程序設計 課件 6-函數(shù)_第1頁
Python語言程序設計 課件 6-函數(shù)_第2頁
Python語言程序設計 課件 6-函數(shù)_第3頁
Python語言程序設計 課件 6-函數(shù)_第4頁
Python語言程序設計 課件 6-函數(shù)_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python語言程序設計PythonLanguageProgramming6函數(shù)引例函數(shù)的概念創(chuàng)建及調(diào)用函數(shù)函數(shù)變量引例【例6-1】編寫程序,要求當給定一個醫(yī)院二次方程ax2+bx+c=0的三個系數(shù)a,b,c時,能夠求得二次方程的解。引例【參考代碼】importmath#引入math庫defpanbieshi(a,b,c):#定義函數(shù)panbieshi()delta=int(pow(b,2)-4*a*c)ifa!=0anddelta>0:x1=(-b+math.sqrt(delta))/(2*a)x2=(-b-math.sqrt(delta))/(2*a)returnx1,x2elifa!=0anddelta==0:x=-b/(2*a)returnx,xelifa!=0anddelta<0:x1=str(-b/(2*a))+"+"+str(math.sqrt(-delta)/(2*a))+"i"x2=str(-b/(2*a))+"-"+str(math.sqrt(-delta)/(2*a))+"i"returnx1,x2elifa==0andb!=0:return-c/belse:return"此方程無解。"a=input("請輸入此方程的二次項系數(shù):")b=input("請輸入此方程的一次項系數(shù):")c=input("請輸入此方程的常數(shù):")print("該一元二次方程的兩個根分別為:"+str(panbieshi(float(a),float(b),float(c))))importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotliba=int(a)b=int(b)c=int(c)delta=int(pow(b,2)-4*a*c)ifdelta>0ordelta==0:g1=(-b+math.sqrt(delta))/(2*a)g2=(-b-math.sqrt(delta))/(2*a)x=np.linspace(-3+g1,g2+3,50)#自變量的取值范圍y=a*x**2+b*x+cplt.plot(x,y)#繪制曲線z=x*0plt.plot(x,z)#繪制y=0的直線plt.scatter(g1,0,color='r',s=50)#顯示方程的根plt.scatter(g2,0,color='r',s=50)#顯示方程的根plt.show()else:print("無法作出該二次函數(shù)的圖像。")函數(shù)的概念函數(shù)的定義為何使用函數(shù)函數(shù)的定義概念類似于數(shù)學中的函數(shù),將a,b,c理解為一組自變量X,函數(shù)返回值return作為因變量Y特點每個函數(shù)執(zhí)行單獨操作,不受別的函數(shù)影響可以輸入零個或多個參數(shù)返回值可以為復合對象為何使用函數(shù)【例6-2】給定字符串,計算字符串中‘a(chǎn)’或者‘A’出現(xiàn)的次數(shù)?!緟⒖即a】str1='ThisisastringwhichIusedtofinda/A!'count=0foriinstr1:ifi=='a'ori=='A':count=count+1else:continueprint(count)為何使用函數(shù)【例6-3】例6-2中實現(xiàn)了對字符串str1中特定字符出現(xiàn)頻次的統(tǒng)計。對另一個字符串str2='HereisanotherstringIusedtofindaandA!',需要對兩個字符串str1和str2分別計算其中‘a(chǎn)’或者‘A’出現(xiàn)的次數(shù)?!緟⒖即a1】str1='ThisisastringwhichIusedtofinda/A!'str2='HereisanotherstringIusedtofindaandA!'count1=0count2=0foriinstr1:ifi=='a'ori=='A':count1=count1+1else:continueprint('str1中,a或者A的個數(shù)是%d'%count1)foriinstr2:ifi=='a'ori=='A':count2=count2+1else:continueprint('str2中,a或者A的個數(shù)是%d'%count2)為何使用函數(shù)【例6-3】例6-2中實現(xiàn)了對字符串str1中特定字符出現(xiàn)頻次的統(tǒng)計。對另一個字符串str2='HereisanotherstringIusedtofindaandA!',需要對兩個字符串str1和str2分別計算其中‘a(chǎn)’或者‘A’出現(xiàn)的次數(shù)?!緟⒖即a2】deffindA(string):count=0foriinstring:ifi=='a'ori=='A':count+=1returncountstr1='ThisisastringwhichIusedtofinda/A!'str2='HereisanotherstringIusedtofindaandA!'printfindA(str1)printfindA(str2)print('str1中,a或者A的個數(shù)是%d'%count1)為何使用函數(shù)Python中函數(shù)的特點分治策略抽象重用簡化性創(chuàng)建及調(diào)用函數(shù)def語句聲明與定義函數(shù)屬性函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)與前向引用何時使用函數(shù)def語句作用def語句用來創(chuàng)建新的函數(shù)對象格式無返回值型def<name>(arg1,arg2,arg3...argN):<statement>有返回值型def<name>(arg1,arg2,arg3...argN):<statement>return<value>def語句【例6-4】使用return語句【參考代碼2】deftestReturn(a):ifa==1:return1elifa==2:return2elifa==3:return3else:return"Toobig"printtestReturn(3)聲明與定義聲明與定義的區(qū)別從編譯原理上來說,聲明是僅僅告訴編譯器,有個某類型的變量會被使用,但是編譯器并不會為它分配任何內(nèi)存。而定義則是分配了內(nèi)存Python中的聲明Python中唯一類似于聲明的語句是global語句,將變量聲明為全局變量Python中的定義Python函數(shù)的定義即是對def的使用,故定義函數(shù)的格式,也是def的格式函數(shù)屬性>>>defplus():...print("hey!plus")...>>>dir(plus)['__call__','__class__','__closure__','__code__','__defaults__','__delattr__','__dict__','__doc__','__format__','__get__','__getattribute__','__globals__','__hash__','__init__','__module__','__name__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','func_closure','func_code','func_defaults','func_dict','func_doc','func_globals','func_name']雖然定義函數(shù)只用了短短兩行的代碼,但是Python中為每個函數(shù)提供了許多屬性,用于描述函數(shù),可使用dir()函數(shù)打印函數(shù)屬性函數(shù)屬性屬性描述操作類型

__doc__func_doc文檔字符串Writable__name__func_name函數(shù)名Writable__module__所屬模塊名Writable__defaults__func_defaults函數(shù)參數(shù)默認值Writable__code__func_code編譯的函數(shù)體Writable__globals__func_globals函數(shù)中的全局變量Read-onlyfunc_dictfunc_dict函數(shù)的命名空間Writable__closure__func_closure函數(shù)閉包的環(huán)境變量Read-only表6-1函數(shù)的屬性及其描述函數(shù)屬性對函數(shù)屬性的使用>>>defplus():...print("hey!plus")...>>>dir(plus)>>>plus.__name__'plus'>>>plus.func_name'plus'函數(shù)屬性函數(shù)屬性是層層嵌套的>>>dir(plus.__code__)['__class__','__cmp__','__delattr__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__le__','__lt__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','co_argcount','co_cellvars','co_code','co_consts','co_filename','co_firstlineno','co_flags','co_freevars','co_lnotab','co_name','co_names','co_nlocals','co_stacksize','co_varnames']>>>dir(plus.__code__.co_varnames)['__add__','__class__','__contains__','__delattr__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__getnewargs__','__getslice__','__gt__','__hash__','__init__','__iter__','__le__','__len__','__lt__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__rmul__','__setattr__','__sizeof__','__str__','__subclasshook__','count','index']函數(shù)屬性文檔字符串屬性用三個單引號或者三個雙引號為函數(shù)編輯使用說明使用help命令就可以打印出指定函數(shù)的功能及使用方法使用函數(shù)的__doc__屬性也可以獲得文檔字符串>>>defa():...'''...Thisfunctioncanprint10...'''...print(10)...>>>help(a)Helponfunctionainmodule__main__:a()Thisfunctioncanprint10>>>a.__doc__'\n\tThisfunctioncanprint10\n\t'函數(shù)調(diào)用函數(shù)需要先創(chuàng)建,然后才能調(diào)用。格式函數(shù)名后加小括號>>>defmulti(a,b):...print(a*b)...>>>multi(10,5)50函數(shù)調(diào)用函數(shù)與前向引用函數(shù)調(diào)用函數(shù)【例6-5】從給定的數(shù)組中找出所有素數(shù)?!緟⒖即a】defisPrime(i):'''Usetojudgei,TruemeansthatiisPrime'''ifi==2:returnTrueforcinrange(2,i):ifi%c==0:returnFalsereturnTruedeffindPrime(lists):'''Usetofindprimeinlists'''prime=[]foriinlists:ifisPrime(i):prime.append(i)returnprimeprint(findPrime([2,4,5,7,123,1122,5673]))

函數(shù)調(diào)用函數(shù)與前向引用【參考代碼】deffoo():print("Iamfoo.")"""invokefirst"""bar()defbar():print("Iambar.")"""definesecond"""bar()foo()

前向引用指函數(shù)調(diào)用在函數(shù)定義之前【例6-6】前向引用.函數(shù)調(diào)用函數(shù)與前向引用前向引用deffoo():print("Iamfoo.")"""invokefirst"""bar()foo()defbar():print("Iambar.")"""definesecond"""bar()?何時使用函數(shù)前向引用函數(shù)使用和定義的規(guī)則一般規(guī)則只做一件事不宜過長完整重構(gòu)。指在不改變代碼功能的前提下,對現(xiàn)有的代碼結(jié)構(gòu)進行改進函數(shù)變量命名空間、形參、實參默認參數(shù)及關(guān)鍵字參數(shù)命名空間、形參、實參命名空間/作用域主程序和函數(shù)各自具有獨立的命名空間一個函數(shù)內(nèi)定義的變量,只能被函數(shù)內(nèi)部的代碼使用,而不能被函數(shù)的外部使用>>>a=10>>>defidA():...a=10...printid(a)>>>id(a)56713296L>>>idA()56713296命名空間、形參、實參命名空間/作用域解析變量名時的順序本地命名空間→函數(shù)內(nèi)命名空間(函數(shù)嵌套函數(shù)的情況)→全局命名空間→內(nèi)置命名空間。(LEGB原則)圖6-1LEGB原則命名空間、形參、實參命名空間/作用域global語句使用global語句在函數(shù)內(nèi)部定義全局變量,統(tǒng)一函數(shù)內(nèi)外變量>>>y=1>>>z=2>>>defglobalX():...globalx...x=y*z>>>globalX()>>>print(x)2命名空間、形參、實參>>>a=10>>>b=a>>>a10>>>b10>>>id(a)54878288L>>>id(b)54878288L>>>b=11>>>a10>>>c=[1,2,3,4]>>>d=c>>>cisdTrue>>>d[0]=10>>>c[10,2,3,4]Python既不是“傳值”,也不是“傳引用”,它傳遞的是對象引用。當對象是可變的,例如上面的列表,那么對它的改變,會影響到其他變量對它的引用,當對象是不可變的,例如上面的常量,當改變它的時候,則會創(chuàng)建一個新的引用對象。傳值和傳引用2命名空間、形參、實參形參即“形式參數(shù)”,是在定義函數(shù)名和函數(shù)體的時候使用的參數(shù),目的用來接收調(diào)用該函數(shù)時傳遞的參數(shù)。如以下a,b:>>>deflink(a,b):...print(a+b)作用是實現(xiàn)主調(diào)函數(shù)與被調(diào)函數(shù)之間的聯(lián)系,通常將函數(shù)所處理的數(shù)據(jù),影響函數(shù)功能的因素或者函數(shù)處理的結(jié)果作為形參命名空間、形參、實參實參指變量、表達式、函數(shù)等在進行函數(shù)調(diào)用時,實參都必須具有確定的值>>>x="hello">>>y="world"命名空間、形參、實參【例6-7】通過定義add函數(shù)以及useAddtoAdd函數(shù),展現(xiàn)函數(shù)的定義,函數(shù)的調(diào)用,參數(shù)的傳遞,參數(shù)的作用域,以及函數(shù)調(diào)用函數(shù)等?!緟⒖即a】defuseAddtoAdd(x,y):print(add(x,y))defadd(x,y):returnx+yuseAddtoAdd(10,11)useAddtoAdd(20,100)默認參數(shù)及關(guān)鍵字參數(shù)參數(shù)傳遞的兩個特點:默認參數(shù)傳遞和名稱傳遞(關(guān)鍵字傳遞)默認參數(shù)傳遞默認參數(shù)是當用戶沒有提供值的時候,分配給函數(shù)的參數(shù)值。其定義的方式如同賦值操作,例如chars=None,賦值語句的右側(cè)None就是參數(shù)chars的默認值,如果只給定參數(shù)名,則該參數(shù)為必需參數(shù)。默認參數(shù)及關(guān)鍵字參數(shù)參數(shù)傳遞的兩個特點:默認參數(shù)傳遞和名稱傳遞(關(guān)鍵字傳遞)默認參數(shù)傳遞以string模塊中的strip函數(shù)為例defstrip(s,chars=None):"""strip(s[,chars])->stringReturnacopyofthestringswithleadingandtrailingwhitespaceremoved.IfcharsisgivenandnotNone,removecharactersincharsinstead.Ifcharsisunicode,Swillbeconvertedtounicodebeforestripping."""returns.strip(chars)調(diào)用方法#方法一fromstringimport*a=“abba”strip(a,”a”)#方法二fromstringimport*a=“abba”strip(a)默認參數(shù)及關(guān)鍵字參數(shù)參數(shù)傳遞的兩個特點:默認參數(shù)傳遞和名稱傳遞(關(guān)鍵字傳遞)名稱傳遞(關(guān)鍵字傳遞)指在調(diào)用函數(shù)中將參數(shù)名作為關(guān)鍵字,從而給函數(shù)中的形參賦值a=10b=5defadd(x,y):print'y=',yprint'x=',xreturna+bprint(add(y=a,x=b))默認參數(shù)及關(guān)鍵字參數(shù)

默認參數(shù)及關(guān)鍵字參數(shù)

默認參數(shù)及關(guān)鍵字參數(shù)【參考代碼】fromtkinterimport*importtkinterroot=tkinter.Tk()#創(chuàng)建根窗體root.title('人口學計算器')#根窗體名稱root.geometry('500x500')#根窗體大小defcalc1():#計算生存人年數(shù)a=float(inp1.get())b=float(inp2.get())c=float(inp3.get())l=(2*b-c)/2m=4*(2*b-c)/2n=5*(2*b-c)/2ifa==0:s='生存人年數(shù)Lx:%s'%str(l)+'\n't=''if1<=a<=4:s='生存人年數(shù)Lx:%s'%str(m)+'\n'ifa>=95:s='數(shù)據(jù)不全或數(shù)據(jù)格式錯誤,無法計算'+'\n'#95歲為開口組,需調(diào)查此組所有人的平均壽命才可計算if5<=a<=94:s='生存人年數(shù)Lx:%s'%str(n)+'\n'txt.insert(END,s)defcalc2():#計算死亡率a=float(inp1.get())b=float(inp2.get())c=float(inp3.get())l=c/bm=c/(4*b)n=c/(5*b)la1=tkinter.Label(root,text='請輸入屬于計算年齡組的任一年齡(阿拉伯數(shù)字):',bg="#C3BED4")#用于提示輸入框應輸入什么文字,下面同此la1.pack()inp1=Entry(root)inp1.pack()la2=tkinter.Label(root,text='請輸入該年齡組的生存人數(shù)(阿拉伯數(shù)字):',bg="#C3BED4")la2.pack()inp2=Entry(root)inp2.pack()la3=tkinter.Label(root,bg="#C3BED4",text='請輸入該年齡組的死亡人數(shù)(阿拉伯數(shù)字):')la3.pack()inp3=Entry(root)inp3.pack()btn1=tkinter.Button(root,bg="#ddf0ed",text='生存人年數(shù)計算',command=calc1,relief=GROOVE)btn1.pack()btn2=tkinter

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論