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

下載本文檔

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

文檔簡介

6.1函數(shù)的定義與使用函數(shù)定義的語法格式如下:

def函數(shù)名([參數(shù)列表]):

函數(shù)體注意:函數(shù)體相對于def關(guān)鍵字必須保持一定的縮進量。函數(shù)頭部的圓括號后面的冒號必不可少。函數(shù)頭部的圓括號內(nèi)是形參列表,如果有多個參數(shù),則需要使用逗號將其分開;不需要聲明形參的類型,Python解釋器會根據(jù)實參的值自動推斷出形參的類型。不需要指定函數(shù)返回值的類型,函數(shù)返回值的類型由函數(shù)中return語句返回的值的類型決定。如果函數(shù)沒有明確的返回值,Python將認為函數(shù)返回空值None。6.1函數(shù)的定義與使用【例6-1】函數(shù)定義示例:返回兩個數(shù)的平均值函數(shù)。>>>defmyave(a,b):ave=(a+b)/2return(ave)6.1函數(shù)的定義與使用函數(shù)調(diào)用的語法格式如下:

函數(shù)名([實參列表])調(diào)用時應注意以下幾點問題:在程序運行過程中,將實參傳遞給形參,實參列表必須與函數(shù)定義的形參列表一一對應。函數(shù)調(diào)用是表達式。如果函數(shù)有返回值,可以在表達式中直接使用;如果函數(shù)沒有返回值,則可以單獨作為表達式語句使用。6.1函數(shù)的定義與使用【例6-2】函數(shù)調(diào)用示例:利用示例6-1定義的函數(shù),求5和8的平均值。定義:>>>defmyave(a,b):ave=(a+b)/2return(ave)

調(diào)用:>>>myave(5,8)6.56.1函數(shù)的定義與使用【例6-3】用函數(shù)實現(xiàn)1+2+3+4+……+n,并顯示所求的和,其中n從鍵盤輸入。defmysum(n1):

s=0foriinrange(1,n1+1):s=s+i

returnsn=eval(input("請輸入n值:"))print("s={}".format(mysum(n)))s=0foriinrange(1,n1+1):s=s+ireturnsn=eval(input("請輸入n值:"))print("s={}".format(mysum(n)))6.1函數(shù)的定義與使用6.1函數(shù)的定義與使用【例6-3】用函數(shù)實現(xiàn)1+2+3+4+……+n,并顯示所求的和,其中n從鍵盤輸入。1234567defmysum(n1):s=0foriinrange(,n1+1):s=s+ireturnsn=eval(input("請輸入n值:"))print("s={}".format(mysum(n)))運行結(jié)果:請輸入n值:10s=556.1函數(shù)的定義與使用【例6-4】編寫一函數(shù),對于已知正整數(shù)n,判斷該數(shù)是否為素數(shù),如果是素數(shù),返回True,否則返回False。123456789101112defprime(n):ifn<2:returnFalseifn==2:returnTrueforiinrange(2,n):ifn%i==0:returnFalseelse:returnTruen=int(input("Enteranumber:"))print(prime(n))運行結(jié)果:Enteranumber:79True6.2函數(shù)參數(shù)位置參數(shù)位置參數(shù)是最為常用的一種參數(shù)傳遞形式,在調(diào)用函數(shù)時,將實參和形參按照順序一一傳遞,而且實參的個數(shù)必須與形參完全相同。>>>defmysum1(a,b,c):#定義函數(shù)mysum1,所有形參都是位置參數(shù)s=a+b+creturns>>>mysum1(1,3,5)#調(diào)用函數(shù)mysum1,實參數(shù)量與形參數(shù)量一致96.2函數(shù)參數(shù)

默認值參數(shù)在調(diào)用函數(shù)時可以不需要給帶有默認值參數(shù)的形參傳遞實參,也可以根據(jù)需要傳遞實參。默認值參數(shù)的格式如下所示:

def函數(shù)名(…,形參名=默認值):

函數(shù)體說明:只要在某個位置定義了默認值參數(shù),那么在其右邊的其它形參不能是沒有帶默認值的一般形參。6.2函數(shù)參數(shù)>>>defmysaid(words,frequency=1):print((words+'')*frequency)>>>mysaid('hello')hello>>>mysaid('hello',2)hellohello6.2函數(shù)參數(shù)【例6-5】使用默認值參數(shù)求得最后得分,入學成績由筆試成績和面試成績求得,給出指定的權(quán)重計算最后得分。運行結(jié)果:總評成績:89.20總評成績:87.0012345defmyScore1(write_score,interview_score,rate=0.6):score=write_score*rate+interview_score*(1-rate)returnscoreprint("總評成績:{:.2f}".format(myScore(86,94)))#權(quán)重為默認值0.6print("總評成績:{:.2f}".format(myScore(83,91,0.5)))#權(quán)重為0.56.2函數(shù)參數(shù)關(guān)鍵參數(shù)在調(diào)用函數(shù)時,可以通過位置進行參數(shù)的傳遞,亦可以通過名稱(關(guān)鍵字)進行參數(shù)的傳遞,按名稱傳遞的方式可稱為關(guān)鍵參數(shù)。關(guān)鍵參數(shù)可以按參數(shù)名稱傳遞值,明確指定哪個值傳遞給哪個參數(shù),實參順序可以和形參順序不一致。6.2函數(shù)參數(shù)【例6-6】使用關(guān)鍵參數(shù)求得最后得分,入學成績由筆試成績和面試成績求得,給出指定的權(quán)重計算最后得分。運行結(jié)果:總評成績:89.20總評成績:87.00總評成績:87.00123456defmyScore2(write_score,interview_score,rate=0.6):#定義函數(shù)myScore2score=write_score*rate+interview_score*(1-rate)returnscoreprint("總評成績:{:.2f}".format(myScore2(86,94)))print("總評成績:{:.2f}".format(myScore2(write_score=83,interview_score=91,rate=0.5)))print("總評成績:{:.2f}".format(myScore2(rate=0.5,interview_score=91,write_score=83,)))6.2函數(shù)參數(shù)可變長度參數(shù)

兩種形式:(1)可以通過帶星的參數(shù)(*parameter)向函數(shù)傳遞可變數(shù)量的實參,在調(diào)用函數(shù)時,該參數(shù)之后的所有參數(shù)被收集為一個元組。>>>defdemo(*p):

print(p)>>>demo(1,2,3)(1,2,3)6.2函數(shù)參數(shù)可變長度參數(shù)(2)也可以通過帶雙星的參數(shù)(**parameter)向函數(shù)傳遞可變數(shù)量的實參,在調(diào)用函數(shù)時,該參數(shù)之后所有參數(shù)被收集為一個字典。>>>defdemo(**p):print(p) >>>demo(a=1,b=2,c=3){'a':1,'b':2,'c':3}6.2函數(shù)參數(shù)可變長度參數(shù)

【例6-7】利用帶星的可變長度參數(shù)計算各數(shù)字之和。運行結(jié)果:

123相加總和為:612345相加總和為:1512345678defmysum2(*c):#定義函數(shù)mysum2(),c為可變參數(shù)total=0foriinc:total=total+iprint("{:^4}".format(i),end="")returntotalprint("相加總和為:{:^4}".format(mysum2(1,2,3)))print("相加總和為:{:^4}".format(mysum2(1,2,3,4,5)))6.2函數(shù)參數(shù)可變長度參數(shù)

【例6-8】利用帶雙星的可變長度參數(shù)計算各數(shù)字之和。運行結(jié)果:{'male':5,'female':6}總和為:111234567defmysum3(**d):#定義函數(shù)mysum3(),d為可變參數(shù)total=0print(d)forkeyind:total=total+d[key]returntotalprint("總和為:{:^4}".format(mysum3(male=5,female=6)))6.3函數(shù)的返回值return語句和函數(shù)返回值

函數(shù)體中使用return語句可以實現(xiàn)從函數(shù)中返回一個值并跳出函數(shù)的功能。>>>defmyave(a,b):ave=(a+b)/2return(ave)>>>myave(5,8)6.56.3函數(shù)的返回值return語句返回多個值

如果需要返回多個值,則可以返回一個列表。6.3函數(shù)的返回值【例6-9】編寫函數(shù),返回一個隨機列表。要求:先編寫一個函數(shù),生成由n個隨機整數(shù)構(gòu)成的列表,然后編寫測試代碼,生成并輸出由5個隨機整數(shù)構(gòu)成的列表的各元素值。123456789importrandomdefmyRandom(n):a=[]foriinrange(n):a.append(random.random())returnab=myRandom(5)foriinb:print(i)運行結(jié)果:6.4變量的作用域變量起作用的范圍叫做變量作用域。局部變量局部變量是指在函數(shù)內(nèi)部使用的變量,只有在函數(shù)內(nèi)部有效,當函數(shù)結(jié)束時變量也將不存在。>>>deffunc():a=10#a局部變量print(a)>>>func()10>>>print(a)Traceback(mostrecentcalllast):File"<pyshell#3>",line1,in<module>print(a)NameError:name'a'isnotdefined6.4變量的作用域全局變量全局變量是指在函數(shù)之外定義的變量,在程序執(zhí)行全過程有效>>>a=10#a全局變量>>>deffunc():print(a)>>>func()10>>>print(a)106.4變量的作用域同名的全局變量和局部變量如果代碼中出現(xiàn)全局變量和局部變量同名的情況,那么該局部變量在自己的作用域范圍內(nèi)屏蔽全局變量,也就是局部變量起作用,在局部變量作用域范圍外,全局變量起作用。6.4變量的作用域同名的全局變量和局部變量【例6-10】全局變量和局部變量同名。123456a=100#全局變量deffunc():a=10#局部變量print("func內(nèi)部:a=",a)func()#局部變量print("func外部:a=",a)#全局變量運行結(jié)果:6.4變量的作用域全局語句global在函數(shù)內(nèi)部定義的變量為局部變量,只有在該函數(shù)內(nèi)可見,當函數(shù)結(jié)束后,局部變量也將不存在,如想保留此變量,可以在函數(shù)內(nèi)部使用global定義全局變量。在函數(shù)內(nèi)部定義全局變量分兩種情況:(1)如果變量在函數(shù)外已經(jīng)定義,想在函數(shù)內(nèi)需要修改這個變量的值,并將修改的結(jié)果反映到函數(shù)之外,可以在函數(shù)內(nèi)用關(guān)鍵字global明確聲明要使用已定義的同名全局變量。6.4變量的作用域【例6-11】使用global定義全局變量。1234567deffunc():globala#聲明或創(chuàng)建全局變量,必須在使用a之前執(zhí)行a=10#修改全局變量的值print("func內(nèi)部:a=",a)a=100#在函數(shù)外部定義了全局變量afunc()

#修改了全局變量a的值print("func外部:a=",a)運行結(jié)果:6.4變量的作用域全局語句global(2)在函數(shù)內(nèi)部直接使用global關(guān)鍵字將一個變量聲明為全局變量,如果在函數(shù)外沒有定義該全局變量,在調(diào)用這個函數(shù)之后,會創(chuàng)建新的全局變量。6.4變量的作用域全局語句global【例6-12】使用global定義全局變量。123456deffunc():globalaa=10print("func內(nèi)部:a=",a)func()print("func外部:a=",a)運行結(jié)果:6.5lambda表達式lambda是一種便捷的、在同一行中定義函數(shù)的方法。lambda實際上生成一個函數(shù)對象,即匿名函數(shù)。lambda表達式的基本格式如下:

lambda[arg1[,arg2,.....argn]]:expression其中,arg1、arg2等為函數(shù)的參數(shù),expression為函數(shù)的語句,其結(jié)果為函數(shù)的返回值。6.5lambda表達式>>>f=lambdax:x**3>>>type(f)<class'function'>>>>f(2)86.5lambda表達式【例6-13】利用lambda函數(shù)輸出列表中的所有正數(shù)。123list=[1,-6,8,9,-3,0,-5]foriinfilter(lambdax:x>0,list):print(i)語法格式:filter(func,list)功能:filter()函數(shù)根據(jù)指定函數(shù)func的返回值對列表list元素進行過濾。即返回該列表list中使得該函數(shù)返回值為True的那些元素組成的filter對象。6.5lambda表達式【例6-13】利用lambda函數(shù)輸出列表中的所有正數(shù)。123list=[1,-6,8,9,-3,0,-5]foriinfilter(lambdax:x>0,list):print(i)運行結(jié)果:6.5lambda表達式【例6-14】利用lambda函數(shù)過濾列表,返回元素和的可迭代對象。1234li=[11,22,33]sl=[1,2,3]new_list=map(lambdaa,b:a+b,li,sl)print(list(new_list))語法格式:map(func,list)功能:map()函數(shù)把一個函數(shù)func依次映射到列表list上的每個元素,并返回一個可迭代的map對象。6.5lambda表達式【例6-14】利用lambda函數(shù)過濾列表,返回元素和的可迭代對象。1234li=[11,22,33]sl=[1,2,3]new_list=map(lambdaa,b:a+b,li,sl)print(list(new_list))運行結(jié)果:6.5lambda表達式【例6-15】利用lambda函數(shù)對字典元素進行排序。>>>a=[('b',4),('a',0),('c',2),('d',3)]>>>sorted(a,key=lambdax:x[0])#按鍵進行升序排序[('a',0),('b',4),('c',2),('d',3)]>>>sorted(a,key=lambdax:x[1])#按值進行升序排序[('a',0),('c',2),('d',3),('b',4)]>>>sorted(a,key=lambdax:x[0],reverse=True)#按鍵進行降序排序[('d',3),('c',2),('b',4),('a',0)]>>>sorted(a,key=lambdax:x[1],reverse=True)#按值進行降序排序[('b',4),('d',3),('c',2),('a',0)]6.5lambda表達式【例6-16】利用lambda函數(shù),按照列表中每個元素的長度排序。>>>list=['there','a','are','an','helloword','of','this']>>>sorted(list,key=lambdax:len(x))#按長度升序排序['a','an','of','are','this','there','helloword']>>>sorted(list,key=lambdax:len(x),reverse=True)#按長度降序排序['helloword','there','this','are','an','of','a']6.6經(jīng)典案例分析【例6-17】編寫一函數(shù),計算n!1234567deffact(n):s=1foriinrange(1,n+1):s*=ireturnsn=eval(input("請輸入一個數(shù):"))print("n!={}".format(fact(n)))運行結(jié)果:6.6經(jīng)典案例分析【例6-18】找出2—100中的所有孿生素數(shù)。孿生素數(shù)是指相差2的素數(shù)對,如3和5、17和19、29和31等。123456789defprime(n):foriinrange(2,n):ifn%i==0:returnFalseelse:returnTrueforiinrange(2,100+1):ifprime(i)==Trueandprime(i+2)==True:print("({:^4},{:^4})".format(i,i+2))運行結(jié)果:6.6經(jīng)典案例分析【例6-19】設計一個程序,實現(xiàn)按照美元和人民幣匯率計算不同幣值之間的轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則是美元兌換人民幣為1:6.27,人民幣兌換美元為1:0.16。具體要求如下:(1)使用函數(shù)封裝貨幣轉(zhuǎn)換功能;(2)程序啟動時顯示的用戶提示信息為"請輸入帶有$或¥符號的貨幣值:";(3)調(diào)用函數(shù)顯示轉(zhuǎn)換結(jié)果。6.6經(jīng)典案例分析1234567891011defcurrConvert(ConvStr):ifConvStr[-1]==

溫馨提示

  • 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

提交評論