Python程序設計基礎項目化教程 課件 項目四 函數與模塊_第1頁
Python程序設計基礎項目化教程 課件 項目四 函數與模塊_第2頁
Python程序設計基礎項目化教程 課件 項目四 函數與模塊_第3頁
Python程序設計基礎項目化教程 課件 項目四 函數與模塊_第4頁
Python程序設計基礎項目化教程 課件 項目四 函數與模塊_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《Python語言程序設計》項目四函數與模塊Contents函數的定義與調用函數的參數列表與返回值模塊的使用方法函數的定義與調用PART01函數就是由部分語句集合而成的一個通用的程序功能部件,是Python語言中最基本的組成工具。我們可以在程序中多次調用函數,令其在程序中執(zhí)行多次。在函數定義過程中,可以設定函數的返回值,并且也可以每次改變作為函數輸入的參數來得到不同的結果。以函數的形式去“包裹”一個具體的操作,使這個操作變成一個可以廣泛應用的工具,這樣在不同情形下我們都可以輕松調用函數完成目標操作。前言Python語言中使用函數分為兩個步驟:定義函數和調用函數。定義函數,即根據函數的輸入、輸出和數據處理完成函數代碼的編寫。定義函數只是規(guī)定了函數會執(zhí)行什么操作,但并不會真正去執(zhí)行。調用函數,即真正去執(zhí)行函數中的代碼,是指根據傳入的數據完成特定的運算,并將運算結果返回到函數調用位置的過程。函數的定義與調用函數的定義與調用【任務描述】了解函數的定義與調用【關鍵步驟】了解函數的定義與調用示例011 defCalCircleArea():#定義名字為CalCircleArea的函數2 s=3.14*3*3#計算半徑為3的圓的面積3 print('半徑為3的圓的面積為:%.2f'%s)#將計算結果輸出4 CalCircleArea()#調用函數CalCircleArea示例程序執(zhí)行完畢后,將在屏幕上輸出28.26。函數的定義與調用示例01流程圖程序運行后,會直接執(zhí)行第4行代碼CalCircleArea(),然后通過該函數調用轉去執(zhí)行第1-3行的代碼。CalCircleArea函數執(zhí)行結束后,會回到函數調用位置繼續(xù)執(zhí)行,因為后面沒有其他代碼,所以程序結束。函數的定義與調用參數列表與返回值PART02參數列表與返回值實際上就是實現一個函數的輸入和輸出功能。通過函數的參數列表,可以為函數傳入待處理的數據,從而使得一個函數更加通用。通過返回值,可以將函數的計算結果返回到函數調用的位置,從而可以利用函數調用返回的結果再去做其他運算。參數列表與返回值計算零件面積對于計算圓面積的函數CalCircleArea,可以將半徑r作為參數,這樣每次調用CalCircleArea函數時只要傳入不同的半徑值,函數就可以自動計算出傳入半徑所對應的圓的面積。我們要計算零件的面積,則需要先計算半徑分別為r1和r2的圓的面積C1和C2,以及邊長分別為d11和d12、d21和d22的兩個長方形的面積S1和S2,然后通過計算C1-C2-S1-S2或C1-(C2+S1+S2)得到零件面積。參數列表與返回值參數列表與返回值【任務描述】了解參數列表與返回值了解形參與實參的作用【關鍵步驟】了解參數列表與返回值了解形參與實參的作用示例021 defCalCircleArea(r):#定義名字為CalCircleArea的函數2 s=3.14*r*r#計算半徑為r的圓的面積3 print('半徑為%.2f的圓的面積為:%.2f'%(r,s))#將計算結果輸出4 defCalRectArea(a,b):#定義名字為CalRectArea的函數5 s=a*b#計算邊長分別為a和b的長方形的面積6 print('邊長為%.2f和%.2f的長方形的面積為:%.2f'%(a,b,s))#將計算結果輸出形參是定義函數時函數名后面的一對小括號中給出的參數列表。形參的作用是接收函數調用時傳入的參數值。參數列表與返回值示例021 a=eval(input('請輸入圓的半徑:'))2 CalCircleArea(a)3 x=eval(input('請輸入長方形的一條邊長:'))4 y=eval(input('請輸入長方形的另一條邊長:'))5 CalRectArea(x,y)實參是在調用函數時函數名后面的小括號中給出的參數列表。當調用函數時,會將實參的值傳遞給對應的形參。執(zhí)行程序后,如果輸入圓的半徑為3,輸入長方形的兩條邊長分別為3.5和2,則在屏幕上會輸出如下結果:請輸入圓的半徑:3半徑為10.00的圓的面積為:28.26請輸入長方形的一條邊長:3.5請輸入長方形的另一條邊長:2邊長為3.50和2.00的長方形的面積為:7.00參數列表與返回值示例02當實參傳遞給形參后,如果在函數體中對形參值做修改,則該修改并不會影響實參,即實參值不會改變。但如果實參是列表等對象時,可在函數體中通過形參修改實參列表中對應元素的值。同時定義多個變量定義多個變量【任務描述】了解多個變量的定義和使用方法【關鍵步驟】了解多個變量的定義和使用方法示例031 defModifyVal(x,y):#ModifyVal函數定義2 x=y#將y的值賦給形參x3 defModifyListElement(ls,idx,val):#ModifyListElement函數定義4 ls[idx]=val#將ls中下標為idx的元素值賦為val5 a,b=5,10#a和b的值分別賦為5和106 print(a,b)#輸出5和107 ModifyVal(a,10)#調用ModifyVal函數試圖將a賦為10,但實際不會修改a的值8 print(a,b)#仍輸出5和109 c=[1,2,3]#c的值賦為[1,2,3]10 print(c)#輸出[1,2,3]11 ModifyVal(c,[4,5,6])#調用ModifyVal函數試圖將c賦為[4,5,6],但實際不會修改12 print(c)#仍輸出[1,2,3]13 ModifyListElement(c,1,5)#調用ModifyListElement函數將下標為1的元素賦為514 print(c)#輸出[1,5,3]定義多個變量示例03

程序執(zhí)行結束后,會在屏幕上輸出如下結果:510510[1,2,3][1,2,3][1,5,3]示例03默認參數【任務描述】了解自定義函數中的默認參數【關鍵步驟】了解自定義函數中的默認參數示例041 defStudentInfo(name,country='中國'):#參數country的默認參數值為'中國'2 print('姓名:%s,國家:%s'%(name,country))3 StudentInfo('李曉明')#這里沒有給country傳實參值,但因為有默認參數所以不會出錯4 StudentInfo('大衛(wèi)','美國')#給country傳了實參,則不再使用默認參數函數的默認參數就是缺省參數,即當調用函數時,如果沒有為某些形參傳遞對應的實參,則這些形參會自動使用默認參數值。程序執(zhí)行完畢后,將在屏幕上輸入如下結果:姓名:李曉明,國家:中國姓名:大衛(wèi),國家:美國默認參數示例04關鍵字參數【任務描述】了解關鍵字參數的使用方式【關鍵步驟】了解關鍵字參數的使用方式示例051 defStudentInfo(name,chineselevel='良好',country='中國'):2 print('姓名:%s,中文水平:%s,國家:%s'%(name,chineselevel,country))3 StudentInfo('李曉明')4 StudentInfo('大衛(wèi)',country='美國')5 StudentInfo(country='美國',chineselevel='一般',name='約翰')關鍵字參數的形式為“形參=實參”程序執(zhí)行完畢后,將在屏幕上輸入如下結果:姓名:李曉明,國家:中國姓名:大衛(wèi),國家:美國關鍵字參數示例05def函數名([普通形參列表,]*不定長參數名[,普通形參列表]):

函數體或def函數名([普通形參列表,]**不定長參數名):

函數體不定長參數,即在調用函數時可以接收任意數量的實參,這些實參在傳遞給函數時會被封裝成元組(位置參數)或字典(關鍵字參數)形式。第一種定義方法使用“*不定長參數名”的方式,表示這個不定長參數對應的是一組位置參數;而第二種定義方法使用“**不定長參數名”的方式,表示這個不定長參數對應的是一組關鍵字參數。不定長參數不定長參數【任務描述】了解不定長參數的使用方法【關鍵步驟】了解不定長參數的使用方法示例051 defStudentInfo1(name,*args):#定義函數StudentInfo12 print('姓名:',name,',其他:',args)3 defStudentInfo2(name,**args):#定義函數StudentInfo24 print('姓名:',name,',其他:',args)5 defStudentInfo3(name,*args,country='中國'):#定義函數StudentInfo36 print('姓名:',name,',國家:',country,',其他:',args)7 StudentInfo1('李曉明','良好','中國')8 StudentInfo2('李曉明',中文水平='良好',國家='中國')9 StudentInfo3('李曉明',19,'良好')10 StudentInfo3('大衛(wèi)',19,'良好',country='美國')不定長參數示例05程序執(zhí)行完畢后,將會輸出如下結果:姓名:李曉明,其他:('良好','中國')姓名:李曉明,其他:{'中文水平':'良好','國家':'中國'}姓名:李曉明,國家:中國,其他:(19,'良好')姓名:大衛(wèi),國家:美國,其他:(19,'良好')示例05拆分參數列表【任務描述】了解列表、元組或字典形式參數的拆分【關鍵步驟】了解列表、元組或字典形式參數的拆分示例071 defSumVal(*args):#定義函數SumVal2 sum=03 foriinargs:4 sum+=i5 print('求和結果為:',sum)6 ls=[3,5.2,7,1]7 SumVal(ls[0],ls[1],ls[2],ls[3])如果一個函數所需要的參數已經存儲在了列表、元組或字典中,則可以直接從列表、元組或字典中拆分出來函數所需要的這些參數,其中列表、元組拆分出來的結果作為位置參數,而字典拆分出來的結果作為關鍵字參數。程序運行結束后,將在屏幕上輸出如下結果:求和結果為:16.2實際上,第7行代碼可以簡寫為SumVal(*ls)。拆分參數列表示例071 defStudentInfo(name,chineselevel,country):#定義函數StudentInfo2 print('姓名:%s,中文水平:%s,國家:%s'%(name,chineselevel,country))3 d={'country':'中國','chineselevel':'良好','name':'李曉明'}4 StudentInfo(**d)將字典的拆分結果作為函數的關鍵字參數。程序運行結束后,將在屏幕上輸出如下結果:姓名:李曉明,中文水平:良好,國家:中國拆分參數列表示例07函數返回值【任務描述】使用return獲取函數返回值【關鍵步驟】使用return獲取函數返回值示例031 defCalCircleArea(r):#定義函數CalCircleArea2 return3.14*r*r#通過return語句將計算得到的圓面積返回3 defCalRectArea(a,b):#定義函數CalRectArea4 returna*b#通過return語句將計算得到的長方形面積返回5 r1,r2,d11,d12,d21,d22=10,1,4,5,6,56 C1=CalCircleArea(r1)#計算大圓的面積7 C2=CalCircleArea(r2)#計算小圓的面積8 S1=CalRectArea(d11,d12)#計算第一個長方形面積9 S2=CalRectArea(d21,d22)#計算第二個長方形面積10 A=C1-C2-S1-S2#大圓面積依次減去小圓和兩個長方形面積,即得到零件面積11 print('零件面積為:%.2f'%A)#將零件面積輸出return語句將函數中的運算結果返回到函數調用的位置。程序運行結束后,將在屏幕上輸出如下結果:零件面積為:260.86函數返回值示例081 defGetList():#定義函數GetList2 return[1,2,3]#將包含3個元素的列表返回3 defGetTuple():#定義函數GetTuple4 return(1,2,3)#將包含3個元素的元組返回5 defGetElements():#定義函數GetElements6 return1,2,3#返回3個數值數據,實際上會將這3個數據封裝成一個元組返回7 print(type(GetList()))8 print(GetList())9 print(type(GetTuple()))10 print(GetTuple())11 print(type(GetElements()))12 print(GetElements())通過return不僅能夠返回數值數據,也可以返回字符串、列表、元組等數據。函數返回值示例08程序運行結束后,將在屏幕上輸出如下結果:<class'list'>[1,2,3]<class'tuple'>(1,2,3)<class'tuple'>(1,2,3)示例08模塊PART03按照代碼功能的不同,將代碼分門別類地放在不同的腳本文件中,這些腳本文件就稱為是模塊(Module)。當要使用一個模塊中的某些功能時,我們可以通過import方式將該模塊導入。模塊importmodel1importmodel2 …importmodelN或importmodel1,model2,...,modelN使用import語句導入模塊語法如下:Import加載模塊【任務描述】了解import和fromimport的使用方法了解包的含義和加載【關鍵步驟】了解import和fromimport的使用方法了解包的含義和加載示例091 defPrintFib(n):#定義函數PrintFib,輸出斐波那契數列的前n項2 a,b=1,1#將a和b都賦為13 foriinrange(1,n+1):#i的取值依次為1,2,…,n4 print(a,end='')#輸出斐波那契數列的第i項5 a,b=b,a+b#更新斐波那契數列第i+1項的值,并計算第i+2項的值6 print()#輸出一個換行7 defGetFib(n):#定義函數GetFib,返回斐波那契數列的前n項8 fib=[]#定義一個空列表fib9 a,b=1,1#將a和b都賦為110 foriinrange(1,n+1):#i的取值依次為1,2,…,n11 fib.append(a)#將斐波那契數列的第i項存入列表fib中12 a,b=b,a+b#更新斐波那契數列第i+1項的值,并計算第i+2項的值13 returnfib#將列表fib返回14 PrintFib(10)#調用PrintFib輸出斐波那契數列前10項15 ls=GetFib(10)#調用GetFib函數獲取斐波那契數列前10項組成的列表16 print(ls)#輸出列表ls中的元素定義一個名字為fibo.py的腳本文件,其中包括PrintFib和GetFib兩個函數的定義。加載模塊示例09程序執(zhí)行完畢后,將在屏幕上輸出如下結果:11235813213455[1,1,2,3,5,8,13,21,34,55]示例091 importfibo#導入fibo模塊2 fibo.PrintFib(5)#調用fibo模塊中的PrintFib函數,輸出斐波那契數列前5項3 ls=fibo.GetFib(5)#調用fibo模塊中的GetFib函數,得到斐波那契數列前5項的列表4 print(ls)#輸出ls中保存的斐波那契數列前5項再定義一個名字為testfibo.py的腳本文件。

程序執(zhí)行完畢后,將在屏幕上輸出如下結果:

11235813213455[1,1,2,3,5,8,13,21,34,55]11235[1,1,2,3,5]加載模塊示例09導入模塊后,如果要使用該模塊中定義的標識符,則需要通過“模塊名.標識符名”的方式。從程序輸出結果可以看到,雖然我們只在testfibo.py中輸出了斐波那契數列的前5項,但當我們importfibo時,fibo.py中第14至16行代碼也執(zhí)行了,所以會同時輸出斐波那契數列的前10項數據。示例09希望一個腳本文件,單獨運行時就執(zhí)行這些語句;而作為模塊導入時,就不執(zhí)行這些語句。要實現這個功能,需要用到每個模塊中都有的一個全部變量__name__。__name__的作用是獲取當前模塊的名稱,如果當前模塊是單獨執(zhí)行的,則其__name__的值就是__main__;否則,如果是作為模塊導入,則其__name__的值就是模塊的名字。加載模塊示例09module.py1 print(__name__)#輸出全局變量__name__的值testmodule.py1 importmodule#導入module模塊當我們執(zhí)行module.py時,會在屏幕上輸出:__main__;而當我們執(zhí)行testmodule.py時,則會在屏幕上輸出:module。即module.py單獨運行和作為模塊導入時其__name__的值是不同的。加載模塊示例09修改后的fibo.py1 defPrintFib(n):#定義函數PrintFib,輸出斐波那契數列的前n項2 a,b=1,1#將a和b都賦為13 foriinrange(1,n+1):#i的取值依次為1,2,…,n4 print(a,end='')#輸出斐波那契數列的第i項5 a,b=b,a+b#更新斐波那契數列第i+1項的值,并計算第i+2項的值6 print()#輸出一個換行7 defGetFib(n):#定義函數GetFib,返回斐波那契數列的前n項8 fib=[]#定義一個空列表fib9 a,b=1,1#將a和b都賦為110 foriinrange(1,n+1):#i的取值依次為1,2,…,n11 fib.append(a)#將斐波那契數列的第i項存入列表fib中12 a,b=b,a+b#更新斐波那契數列第i+1項的值,并計算第i+2項的值13 returnfib#將列表fib返回14 if__name__=='__main__':#只有單獨執(zhí)行fibo.py時該條件才成立15 PrintFib(10)#調用PrintFib輸出斐波那契數列前10項16 ls=GetFib(10)#調用GetFib函數獲取斐波那契數列前10項組成的列表17 print(ls)#輸出列表ls中的元素加載模塊示例09此時,當執(zhí)行fibo.py時,將在屏幕上輸出如下結果:11235813213455[1,1,2,3,5,8,13,21,34,55]當執(zhí)行testfibo.py時,將在屏幕上輸出如下結果:11235[1,1,2,3,5]加載模塊示例09除了可以導入自己編寫的模塊外,也可以直接導入系統(tǒng)提供的模塊,使用其中的功能。例如,我們可以通過sys模塊獲取運行Python腳本時傳入的參數,如下面的代碼所示。1 importfibo#導入fibo模塊2 importsys#導入系統(tǒng)提供的sys模塊3 n=int(sys.argv[1])#通過sys模塊的argv獲取執(zhí)行腳本時傳入的參數4 fibo.PrintFib(n)#調用fibo模塊中的PrintFib函數,輸出斐波那契數列前n項5 ls=fibo.GetFib(n)#調用fibo模塊中的GetFib函數,得到斐波那契數列前n項的列表6 print(ls)#輸出ls中保存的斐波那契數列前n項加載模塊示例09在系統(tǒng)控制臺下,如果執(zhí)行“pythontestfibo.py5”,則會輸出如下結果:11235[1,1,2,3,5]如果執(zhí)行“pythontestfibo.py10”,則會輸出如下結果:11235813213455[1,1,2,3,5,8,13,21,34,55]示例09可以使用fromimport將模塊中的標識符(變量名、函數名等)直接導入當前環(huán)境,這樣我們在訪問這些標識符時就不再需要指定模塊名。from模塊名import標識符1,標識符2,...,標識符N加載模塊示例091 fromfiboimportPrintFib,GetFib#導入fibo模塊中的PrintFib和GetFib2 PrintFib(5)#忽略fibo模塊名直接調用PrintFib函數3 ls=GetFib(5)#忽略fibo模塊名直接調用GetFib函數4 print(ls)#輸出ls中保存的斐波那契數列前5項數據程序執(zhí)行結束后,將在屏幕上輸出如下結果:11235[1,1,2,3,5]加載模塊示例091 fromfiboimportPrintFib#只導入fibo模塊中的PrintFib2 PrintFib(5)#忽略fibo模塊名直接調用PrintFib函數程序執(zhí)行結束后,將在屏幕上輸出如下結果:11235也可以改為只導入一個模塊中的部分標識符,如下面的代碼所示:加載模塊示例091 importfiboasf#導入fibo模塊,并為fibo起了個別名f2 f.PrintFib(5)#調用fibo模塊中的PrintFib函數,輸出斐波那契數列前5項無論是利用import導入模塊、還是用fromimport導入模塊中的標識符,在導入的同時都可以使用as為模塊或標識符起別名。1 fromfiboimportPrintFibaspf#導入fibo模塊中的PrintFib,并重命名為pf2 pf(5)#調用fibo模塊中的PrintFib函數,輸出斐波那契數列前5項加載模塊示例09Python中的包(Package)的作用與操作系統(tǒng)中文件夾的作用相似,利用包可以將多個關系密切的模塊組成在一起,一方面方便進行各腳本文件的管理,另一方面可以有效避免模塊命名沖突問題。定義一個包,就是創(chuàng)建一個文件夾并在該文件夾下創(chuàng)建一個__init__.py文件,文件夾的名字就是包名。另外,可以根據需要在該文件夾下再創(chuàng)建子文件夾,子文件夾中創(chuàng)建一個__init__.py文件,則又形成了一個子包。模塊可以放在任何一個包或子包中,在導入模塊時需要指定所在的包和子包的名字。例如,如果要導入包A中的模塊B,則需要使用“importA.B”。包sound/頂級包

__init__.py初始化這個聲音包

formats/文件格式轉換子包

__init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/音效子包 __init__.py echo.py surround.py reverse.py ... filters/過濾器子包 __init__.py equalizer.py vocoder.py karaoke.py ...下面通過Python官方文檔中的一個例子理解包的結構和使用方法。下面是關于聲音數據處理的包結構:包如果要使用sound包的effects子包的echo模塊,則可以通過下面方式導入:importsound.effects.echo假設在echo模塊中有一個echofilter函數,則調用該函數時必須指定完整的名字(包括各層的包名和模塊名),即:fromsound.effectsimportecho也可以使用fromimport方式導入包中的模塊,如:sound.effects.echo.echofilter(實參列表)echo.echofilter(實參列表)通過這種方式,也可以正確導入sound包的effects子包的echo模塊,而且在調用echo模塊中的函數時不需要加包名:包使用fromimport也可以直接導入模塊中的標識符,如:fromsound.effects.echoimportechofilter這里直接導入了echo模塊中的echofilter函數,此時調用echofilter函數可直接寫作:echofilter(實參列表)包猴子補丁是指在運行時動態(tài)替換已有的代碼,而不需要修改原始代碼。1 defSum(a,b):#定義

溫馨提示

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

評論

0/150

提交評論