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

下載本文檔

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

文檔簡介

Python函數(shù)與模塊代碼復用函數(shù)與模塊前面我們曾經(jīng)使用過函數(shù)和模塊:模塊:math、random……函數(shù):int、float、str、eval、print、input、pow、round……函數(shù):一些經(jīng)常重復使用的程序代碼定義為函數(shù),方便重復調(diào)用執(zhí)行,以提高程序的模塊化和代碼的重復利用率。函數(shù)對大型程序的開發(fā)是很有用的。分為系統(tǒng)函數(shù)和用戶自定義函數(shù)。提高代碼重用率。模塊(module):是Python最高級別的程序組織單元,比函數(shù)顆粒度更大,一個模塊可以包含若干個函數(shù)。分系統(tǒng)模塊和用戶自定義模塊,用戶自定義的一個模塊就是一個.py程序文件。自定義函數(shù)Python的函數(shù)由函數(shù)名、參數(shù)和函數(shù)體組成。格式如下:def<函數(shù)名>([形式參數(shù)列表]): <執(zhí)行語句> #函數(shù)體 [return<返回值>]例如:defmyfunc(x,y): returnx+y

或print(x+y)注意:關鍵字def;函數(shù)的命名原則與變量命名相同;使用縮進表示與函數(shù)體的隸屬關系;不需要聲明其返回類型,也不需要聲明參數(shù)的傳入類型。函數(shù)的調(diào)用調(diào)用:程序中直接寫函數(shù)名和相應參數(shù)即可。例如:defmyfunc(x,y): #函數(shù)定義,x,y是形參

returnx+ya,b=2.5,3.6c=myfunc(a,b)#函數(shù)調(diào)用,a和b為實參print(a,b,c)函數(shù)的參數(shù)形參:函數(shù)定義時,用來接收調(diào)用該函數(shù)時傳入的參數(shù)稱為形式參數(shù)(parameter),簡稱形參。實參:調(diào)用函數(shù)時,實際傳遞給函數(shù)的參數(shù)稱為實際參數(shù)(argument),簡稱實參。函數(shù)調(diào)用時發(fā)生參數(shù)傳遞,提供的實際參數(shù)應與被調(diào)用函數(shù)的形式參數(shù)按順序一一對應,而且參數(shù)類型要兼容。舉例1、編制求圓的面積的函數(shù)2、編制求n!的函數(shù)函數(shù)定義函數(shù)調(diào)用參數(shù)傳遞方式按值傳遞——單項傳遞defchange(number,string,lst):number=5string='GoodBye'lst=[4,5,6]print("Inside:",number,string,lst)num=10string='hello'lst=[1,2,3]print('Before:',num,string,lst)change(num,string,lst)#調(diào)用print('After:',num,string,lst)程序運行結(jié)果如下:Before:10hello[1,2,3]Inside:5GoodBye[4,5,6]After:10hello[1,2,3]參數(shù)傳遞方式(2)傳遞列表、字典等可變對象(按地址傳遞)——可修改可改變對象的值defchange(lst):lst[0]=10print("Insidelst={}".format(lst))lst=[1,2,3,4,5]print("Beforelst={}".format(lst))change(lst)print("Afterlst={}".format(lst))程序運行結(jié)果如下:Beforelst=[1,2,3,4,5]Insidelst=[10,2,3,4,5]Afterlst=[10,2,3,4,5]參數(shù)傳遞方式如交換兩個數(shù)的問題,可以采用以下程序:defswap(lst):lst[0],lst[1]=lst[1],lst[0]lst1=list(eval(input("輸入要交換的數(shù)字:")))swap(lst1)print(lst1)程序運行結(jié)果如下:10,20[20,10]從語句執(zhí)行結(jié)果可知,swap()函數(shù)實現(xiàn)了數(shù)據(jù)的交換。(3)傳遞不可變對象元組(按地址傳遞)參數(shù)的類型1.關鍵字參數(shù)實參的數(shù)目應與形參完全匹配。例如,調(diào)用函數(shù)mysum(),一定要傳遞兩個參數(shù),否則會出現(xiàn)一個語法錯誤。defmysum(x,y): returnx+ymysum(5,4)參數(shù)的類型2.默認值參數(shù)定義時可指定默認值,“形參變量名=參數(shù)值”,當實參沒有值時就用默認值。defdisplay(a=“hello”,b=“world”):print(a+b)#主程序display()#都取默認值輸出:helloworlddisplay(b=“!!!”)#a取默認值輸出:hello!!!display(a=“你好”)#b取默認值輸出:你好worlddisplay(“!!!”)#未指定參數(shù)名,從左到右傳遞匹

配輸出:!!!world參數(shù)的類型3.任意個數(shù)參數(shù),(元組類型變長參數(shù)傳遞)參數(shù)名稱前面加一個星號“*”,則表示參數(shù)是一個元組類型可變長參數(shù)。需要放在必須復制的參數(shù)之后。例如:d是固定參數(shù)*dtup表示一個元組例5.3帶元組類型變長參數(shù)的函數(shù)調(diào)用示例defprintse_series(d,*dtup):print('必須參數(shù):',d)iflen(dtup)!=0:print('元組參數(shù):',end='')foriindtup:print(i,end='')printse_series(10)printse_series(10,20,30,40)運行結(jié)果為:必須參數(shù):10必須參數(shù):10元組參數(shù):203040注意:所有其他類型的形式參數(shù),必須在可變參數(shù)之前出現(xiàn)。函數(shù)中變量的作用域指在程序中能夠?qū)υ撟兞窟M行讀/寫操作的范圍。變量分為:函數(shù)中定義的變量(Local,簡稱L)嵌套中父級函數(shù)的局部作用域變量(Enclosing,簡稱E)模塊級別定義的全局變量(Global,簡稱G)內(nèi)置模塊中的變量(Built-in,簡稱B)優(yōu)先級由高到低:LEGB。同名變量出現(xiàn)在不同的函數(shù)體中,不相互干擾,能相互訪問;相同命名標識的變量在同一個函數(shù)體中或具有函數(shù)嵌套關系時,按優(yōu)先級進行訪問。函數(shù)中變量的作用域——LEGB例5.6變量作用域測試x=0 #global模塊中定義的全局變量defouter():

x=1 #enclosing局部變量definner():

x=2 #local,函數(shù)中定義的print('local:x=',x) #x=2inner()print('enclosing:x=',x) #x=1outer()print('global:x=',x) #x=0模塊1.標準庫模塊標準庫模塊是Python自帶的函數(shù)模塊,也稱為標準鏈接庫。Python提供了大量的標準庫模塊,實現(xiàn)了很多常見功能,包括數(shù)學運算、字符串處理、操作系統(tǒng)功能、網(wǎng)絡和Internet編程、圖形繪制、圖形用戶界面創(chuàng)建,等等,這些為應用程序開發(fā)提供了強大支持。標準庫模塊并不是Python語言的組成部分,而是由專業(yè)開發(fā)人員預先設計好并隨語言提供給用戶使用的。用戶可以在安裝了標準Python系統(tǒng)的情況下,通過導入命令來使用所需要的模塊。用戶自定義模塊2.用戶自定義模塊用戶自定義一個模塊就是建立一個Python程序文件,其中包括變量、函數(shù)的定義。下面是一個簡單的模塊,程序文件名為support.py。defprint_func(par): print("Hello:",par)一個Python程序可通過導入一個模塊而讀取這個模塊的內(nèi)容。import模塊名1[,模塊名2[……,模塊名n]]例如:importsupport#導入模塊support.print_func(“Brenden”)#調(diào)用模塊函數(shù)自定義模塊應用例5.11創(chuàng)建一個fibo.py模塊,其中包含兩個求Fibonacci數(shù)列的函數(shù),然后導入該模塊并調(diào)用其中的函數(shù)。創(chuàng)建一個fibo.py模塊。deffib1(n):a,b=0,1whileb<n:print(b,end='')a,b=b,a+bprint()deffib2(n):a1,b1=0,1result=[]whileb1<n:result.append(b1)a1,b1=b1,a1+b1returnresult模塊中函數(shù)使用importfibo.pyfibo.fib1(1000)結(jié)果:1123581321345589144233377610987fibo.fib2(100)結(jié)果:[1,1,2,3,5,8,13,21,34,55,89]Python程序結(jié)構Python程序:一個或多個程序文件,每個程序文件就是一個.py源程序文件。一個主程序+多個模塊組成。(模塊也是程序)主程序定義了程序的主控流程,是執(zhí)行程序時的啟動文件,屬于頂層文件。模塊則是函數(shù)庫,相當于子程序。模塊是用戶自定義函數(shù)的集合體,主程序可以調(diào)用模塊中定義的函數(shù)來完成應用程序的功能,還可以調(diào)用標準庫模塊,同時模塊也可以調(diào)用其他模塊或標準庫模塊定義的函數(shù)。Python程序結(jié)構示例假設一個由三個程序文件a.py、b.py和c.py組成的Python程序結(jié)構,其中a.py是主程序,b.py和c.py是模塊。a調(diào)用b、c,c調(diào)用b。程序從a開始執(zhí)行。importmathdefhello(person): print("Hello",person)defbye(person): print("Bye",person)defdisp(r): print(math.pi*r*r)importb,cb.hello("Jack")b.bye("Jack")c.show(10)importbdefshow(n):b.disp(n)模塊b模塊c主程序a函數(shù)&模塊應用舉例分析:定義一個函數(shù)求累加項,循環(huán)控制累加100次。程序如下:defmy_fun(n,m):t=0foriinrange(1,n+1):t+=i**mreturnts=my_fun(100,1)+my_fun(50,2)+my_fun(10,-1)print(s)

例5.14設計一個程序,求同時滿足下列兩個條件的分數(shù)x的個數(shù):(1)1/6<x<1/5(2)x的分子、分母都是素數(shù)且分母是2位數(shù)。分析:設x=m/n,根據(jù)條件(2),有10≤n≤99;根據(jù)條件(1),有5m≤n≤6m,并且n、m均為素數(shù)。用窮舉法來求解這個問題,并設計一個函數(shù)來判斷一個數(shù)是否為素數(shù),若是素數(shù)則返回值True,否則為False。函數(shù)&模塊應用舉例frommathimport*defisprime(n):forjinrange(2,int(sqrt(n)+1)):ifn%j==0:returnFalsebreakreturnTruedefmain():count=0forninrange(11,100):ifisprime(n):

溫馨提示

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

評論

0/150

提交評論