《Python語言程序設(shè)計(jì)》 課件 第7章 函數(shù)_第1頁
《Python語言程序設(shè)計(jì)》 課件 第7章 函數(shù)_第2頁
《Python語言程序設(shè)計(jì)》 課件 第7章 函數(shù)_第3頁
《Python語言程序設(shè)計(jì)》 課件 第7章 函數(shù)_第4頁
《Python語言程序設(shè)計(jì)》 課件 第7章 函數(shù)_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章函數(shù)第7章

函數(shù)何時(shí)需要使用函數(shù)?7.1函數(shù)的定義與調(diào)用7.2函數(shù)參數(shù)7.3

特殊函數(shù)7.4裝飾器7.5變量的作用域7.6模塊7.7函數(shù)應(yīng)用舉例(1)計(jì)算機(jī)程序去解決一個(gè)復(fù)雜問題的時(shí)候,為降低程序難度,把一個(gè)復(fù)雜程序分解成若干規(guī)模較小的任務(wù),分別由函數(shù)完成,然后由主程序去調(diào)用這些函數(shù)來解決復(fù)雜問題。什么時(shí)候使用函數(shù)?(2)程序功能單一且能反復(fù)使用。例如pow()、sqrt()、log(x)、input()等函數(shù)使程序模塊化、減少代碼重復(fù)率、清晰便于閱讀7.1函數(shù)的定義與調(diào)用7.1.1函數(shù)定義

一類是由Python系統(tǒng)提供的系統(tǒng)函數(shù)如input()、print(),pow()等,系統(tǒng)函數(shù)可以直接被用戶調(diào)用。另一類是用戶自定義函數(shù),由用戶編寫供人調(diào)用。用戶自定義的函數(shù)的一般形式如下:def函數(shù)名([形參說明表]):函數(shù)語句體return表達(dá)式關(guān)鍵字def與函數(shù)名間要空格,函數(shù)名后面是一對(duì)小圓括號(hào)(),最后以冒號(hào)結(jié)束,函數(shù)語句體要縮進(jìn)。函數(shù)可分為兩類:return語句可以省略,函數(shù)將返回None。Python還允許函數(shù)體為空的函數(shù),其形式為:def函數(shù)名():pass例7-1-1定義一個(gè)求兩個(gè)數(shù)和的函數(shù)defadd(a,b):c=a+b

returnc或?qū)懗蒬efadd(a,b):returna+ba,b為形式參數(shù)例7-1-2定義一個(gè)求n階乘的函數(shù)deffact(n):

s=1forkinrange(1,n+1):s=s*kreturns當(dāng)空函數(shù)被調(diào)用時(shí)什么也不做,定義空函數(shù)的目的是為了表示該此需要定義一個(gè)函數(shù)。n為形式參數(shù)1、以下正確定義函數(shù)首部語句()

A.defsum(): B.Defsum()C.defsum() D.Defsum():7.1.2函數(shù)的調(diào)用有參函數(shù)調(diào)用一般形式為:函數(shù)名(實(shí)際參數(shù)表)無參數(shù)函數(shù)調(diào)用形式為:函數(shù)名(

)用戶自定義函數(shù)是不能直接運(yùn)行,必須通過調(diào)用運(yùn)行才能完成其功能。例7.3調(diào)用add()函數(shù),實(shí)現(xiàn)兩個(gè)數(shù)相加,并輸出兩數(shù)的和。defadd(a,b): c=a+breturnc s1=add(3,4)

S2=add(9,0)

print("s1=%d,s2=%d"%(s1,s2))調(diào)用add函數(shù),3,4為實(shí)參調(diào)用add函數(shù),9,0為實(shí)參程序運(yùn)行結(jié)果:s1=7,s2=9例7-1-3編寫程序,調(diào)用fact()函數(shù),求整數(shù)n的階乘n?。?)源程序代碼deffact(m):s=1forkinrange(1,m+1):s=s*kreturnss=fact(3)調(diào)用函數(shù)fact(),3為實(shí)參print("3!=%d",s)n=eval(input("輸入整數(shù)n:"))print("n!=%d",fact(n))調(diào)用函數(shù)fact(),n為實(shí)參(2)程序運(yùn)行結(jié)果3!=6輸入整數(shù)n:5↙5!=120defmyf(x,y):returnx*x+y*ydefmain():a,b=eval(input())print(myf(a,b))main()注:可以定義一個(gè)主函數(shù),用于完成程序總體調(diào)度功能。例7-1-2,程序文件py.py的內(nèi)容如下:程序運(yùn)行結(jié)果如下:3,4↙25例7-1-4求五邊形面積,長(zhǎng)度k1~k7從鍵盤輸入。分析:求五邊形的面積可以變成求三個(gè)三角形面積的和。由于要三次計(jì)算三角形的面積,為了程序簡(jiǎn)單起見,可將計(jì)算三角形面積定義成函數(shù)。然后在主函數(shù)中三次調(diào)用它,分別得到三個(gè)三角形的面積,然后相加得到五邊形的面積。例8-1程序如下:frommathimport*defts(a,b,c):s=(a+b+c)/2s=sqrt(s*(s-a)*(s-b)*(s-c))returnsdefmain():k1,k2,k3,k4,k5,k6,k7=eval(input(‘輸入7條邊:’))s=ts(k1,k2,k6)+ts(k6,k3,k7)+ts(k7,k4,k5)print("area=",s)main()其中,p=(a+b+c)/2。三角形面積公式為:1,3,6,9,5,8,4復(fù)雜程序通常由一個(gè)主程序以及多個(gè)函數(shù)模塊組成。下圖中,a.py是主程序,b.py和c.py是函數(shù)模塊。函數(shù)模塊b.py和c.py一般不直接執(zhí)行,只能從主程序a.py開始。

復(fù)雜程序調(diào)用關(guān)系defadd(a,b):a=a+1b=b+1c=a+breturncx=5;y=6s=add(x,y)print('x={},y={}'.format(x,y))print("s1={}".format(s))調(diào)用add函數(shù),x,y為實(shí)參程序運(yùn)行結(jié)果:1、當(dāng)實(shí)際參數(shù)為不可變對(duì)象時(shí),實(shí)參對(duì)形參傳遞是值傳遞且單向,實(shí)參值傳給形參,形參值不能回傳給實(shí)參x=5,y=6s=13a,b為形式參數(shù)7.2函數(shù)參數(shù)7.2.1參數(shù)傳遞實(shí)參向形參傳送數(shù)據(jù)的方式是值傳遞實(shí)參x=5,y=6...130…101150x56yb...217…203220a566a7b形式參數(shù)a,b傳遞給a=a+1b=b+1形參a,b的值改變了,但是不能回傳給實(shí)參x,y2、當(dāng)實(shí)際參數(shù)為可變對(duì)象時(shí),是將實(shí)參地址傳給形參,若函數(shù)調(diào)用中形參值被修改,則實(shí)參值相應(yīng)修改例7-2-1閱讀程序,了解實(shí)際參數(shù)為可變對(duì)象參數(shù)傳遞情況defupdate(num):num[0]=3num[2]=7num[4]=9if__name__=="__main__":list=[0,1,2,3,4,5]print("函數(shù)調(diào)用前結(jié)果:",list)update(list) print("函數(shù)調(diào)用后結(jié)果:",list)程序運(yùn)行結(jié)果函數(shù)調(diào)用前結(jié)果:[0,1,2,3,4,5]函數(shù)調(diào)用后結(jié)果:[3,1,7,3,9,5]實(shí)參為可變對(duì)象時(shí),實(shí)參存儲(chǔ)地址傳遞給形參。這時(shí),實(shí)參和形參共享內(nèi)存存儲(chǔ)單元。7.2.2參數(shù)的類型1.必需參數(shù)必需參數(shù)也稱位置參數(shù),調(diào)用時(shí)須以正確的順序傳入函數(shù),實(shí)參的個(gè)數(shù)必須與形參個(gè)數(shù)一致且一一對(duì)應(yīng)。執(zhí)行上面程序時(shí)錯(cuò)誤提示為“TypeError:take()missing1requiredpositionalargument:'z'”即:少了一個(gè)必需的位置參數(shù)z,若調(diào)用函數(shù)改為take(3,5,4),則輸出結(jié)果為60。deftake(x,y,z):h=x*y*zreturnhk=take(3,5)print("輸出結(jié)果為:",k)調(diào)用下面take()函數(shù)必須傳入3個(gè)參數(shù),否則會(huì)出現(xiàn)錯(cuò)誤:Python中調(diào)用函數(shù)時(shí),可使用的參數(shù)類型主要有必需參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)值參數(shù)和不定長(zhǎng)參數(shù)等四類。defmykey(x,y):print("x=",x,"y=",y)mykey(y=10,x=20)2.關(guān)鍵字參數(shù)關(guān)鍵字參數(shù)的形式為:形參名=實(shí)參值可使用關(guān)鍵字參數(shù)指定形參的名稱傳遞其對(duì)應(yīng)的值,這可以跳過某些參數(shù)的順序,不需要一一對(duì)應(yīng)。程序運(yùn)行結(jié)果如下:x=20y=10注意:默認(rèn)值參數(shù)必須出現(xiàn)在形參表的最右端。若第一個(gè)形參使用默認(rèn)值參數(shù)后,其后所有形參也必須使用默認(rèn)值參數(shù),否則會(huì)出錯(cuò)。3.默認(rèn)值參數(shù)默認(rèn)值參數(shù)的形式為:形參名=默認(rèn)值例如:defmydefa(x,y=200,z=100):print("x=",x,"y=",y,"z=",z)mydefa(50,100)程序輸出結(jié)果如下:x=50y=100z=1008以下程序的運(yùn)行結(jié)果是()。defJc(m,n,k):s=m*n+k*ncreturnsy=Jc(k=5,2,4)print("y的輸出結(jié)果為:",y)A)28B)5C)20D)程序運(yùn)行時(shí)出錯(cuò)D7以下程序的運(yùn)行結(jié)果是()。deffact(m,n=5,k):s=m*n+k*nreturnsy=fact(2,4)print("y的輸出結(jié)果為:",y)A)30B)28C)20D)程序運(yùn)行時(shí)出錯(cuò)Dy=Jc(2,4,k=5)Jc(k=5,m=2,n=4)fact(m,k,n=5):例如:defmyvar1(*t):print(t)myvar1(1,2,3)myvar1(1,2,3,4,5)4.不定長(zhǎng)參數(shù)(1)元組不定長(zhǎng)參數(shù)元組不定長(zhǎng)度參數(shù)在參數(shù)名前面加*,用來接受任意多個(gè)實(shí)參并將其放在一個(gè)元組中。程序輸出結(jié)果如下:(1,2,3)(1,2,3,4,5)例如:defmyvar2(**t):print(t)myvar2(x=1,y=2,z=3)myvar2(name='bren',age=25)(2)字典不定長(zhǎng)度參數(shù)其表示方式是在函數(shù)參數(shù)名前面加**,可以接受任意多個(gè)實(shí)參。實(shí)參的形式為:關(guān)鍵字=實(shí)參值程序輸出結(jié)果如下:{'y':2,'x':1,'z':3}{'age':25,'name':'bren'}defmytotal(x,y=30,*z1,**z2):

t=x+yforiinrange(0,len(z1)):t+=z1[i]forkinz2.values():t+=kreturnts=mytotal(1,20,2,3,4,5,k1=100,k2=200)print(s)例7-2-2閱讀下列程序,寫出程序的執(zhí)行結(jié)果。程序輸出結(jié)果:335函數(shù)調(diào)用后,x=1,y=20,z1=(2,3,4,5),z={‘k’:100,’k2’:200}先執(zhí)行t=x+y=21其次,累加z1的值后t=35最后,累加z2的值后t=3353.下列程序的運(yùn)行結(jié)果是()。deff(x=2,y=0):returnx-yy=f(y=f(),x=5)print(y)A.-3B.3C.2D.5B1.以下關(guān)于函數(shù)調(diào)用說法錯(cuò)誤的是()。A.函數(shù)調(diào)用函數(shù)的實(shí)際參數(shù)和形式參數(shù)不需要同名。B.函數(shù)形參不用指定參數(shù)類型,Python會(huì)自動(dòng)根據(jù)實(shí)參的值來確定參數(shù)的類型。C.函數(shù)的實(shí)際參數(shù)可以是表達(dá)式或常量。D.對(duì)于關(guān)鍵字參數(shù),實(shí)參的個(gè)數(shù)必須與形參個(gè)數(shù)一致且一一對(duì)應(yīng)。DC2.以下程序的運(yùn)行結(jié)果是()。defmy(a,b,c=8):

returna+b+cprint(my(6,7,15))A)21B)不確定值C)28D)參數(shù)傳遞出錯(cuò)例如:lambdax,y:x+y7.3兩類特殊函數(shù)7.3.1匿名函數(shù)1.匿名函數(shù)的定義匿名函數(shù)也稱lambda函數(shù),不需要用def定義,函數(shù)體只一行代碼即一個(gè)表達(dá)式。代碼運(yùn)行結(jié)果被作為函數(shù)的返回值自動(dòng)返回,且只有一個(gè)返回值。定義格式:lambda[參數(shù)1[,參數(shù)2,……,參數(shù)n]]:表達(dá)式2.匿名函數(shù)的調(diào)用例如:>>>f=lambdax,y:x+y>>>f(5,10)15注:參數(shù)可以有一個(gè)或多個(gè),也可以缺省。f=lambdaa,b=2,c=5:a*a-b*cprint("Valueoff:",f(10,15))print("Valueoff:",f(20,10,38))print("Valueoff:",f(c=20,a=10,b=38))例7-3-1閱讀程序,寫出調(diào)用lambda函數(shù)的結(jié)果?Valueoff:25程序輸出結(jié)果如下:#用默認(rèn)值參數(shù)#用關(guān)鍵字實(shí)參Valueoff:20Valueoff:-660a=10,b=15,c=5a=20,b=10,c=38a=10,b=38,c=20deff():returnlambdax,y:x*x+y*yfx=f()print(fx(3,4))3.把匿名函數(shù)作為函數(shù)的返回值也可以把匿名函數(shù)作為普通函數(shù)的返回值返回。程序輸出結(jié)果為:25可以序列或字典元素引用作為函數(shù)名來調(diào)用匿名函數(shù),一般格式為:4.把匿名函數(shù)作為序列或字典元素可以將匿名函數(shù)作為序列或字典元素,以列表為例,一般格式為:列表名=[匿名函數(shù)1,匿名函數(shù)2,…,匿名函數(shù)n]列表或字典元素引用(匿名函數(shù)實(shí)參)>>>f['b'](3,4)例如:>>>f=[lambdax,y:x+y,lambdax,y:x-y]>>>print(f[0](3,5),f[1](3,5))8-2>>>f={'a':lambdax,y:x+y,'b':lambdax,y:x-y}>>>f['a'](3,4)7-11.下列程序的運(yùn)行結(jié)果是()。f=[lambdax=1:x*2,lambdax:x**2]print(f[1](f[0](3)))A.1B.6C.9D.36D2下列程序的運(yùn)行結(jié)果是()。 add=lambdax,y:y%x+y//xprint(add(9,2))A.5.5B.8.5C.1D.2D遞歸函數(shù)是指一個(gè)函數(shù)的函數(shù)體中又直接或間接地調(diào)用該函數(shù)本身的函數(shù)。7.3.2遞歸函數(shù)1.遞歸的基本概念deff(n):

ifn==1:

return2

else:

returnf(n-1)+2deff1(n):

deff2(n):…

z=f2(y)

y=f1(y)

間接遞歸

直接遞歸遞歸調(diào)用調(diào)用次數(shù)應(yīng)該是有限次,任何一個(gè)遞歸調(diào)用程序必須包括兩部分:(2)遞歸調(diào)用的結(jié)束條件,稱為遞歸的邊界條件。(1)遞歸循環(huán)繼續(xù)的過程即遞歸公式。例7-3-2編寫程序,利用遞歸調(diào)用方式求n!。分析:由于n!=n×(n-1)×(n-2)×(n-3)×…×2×1!,可得n!的遞歸公式為n!=n×(n-1)!。1!=1,因此,n=1是遞歸的邊界條件,其邊界值為1。deffac(n):ifn<=1:return1else:returnn*fac(n-1)m=fac(3)print(m)程序運(yùn)行結(jié)果為:6fac(3)的計(jì)算流程1以下程序的輸出結(jié)果是(

)deffib(n):ifn>2:returnfib(n-1)+fib(n-2)else:return3j=fib(4)print(j)92.下列代碼運(yùn)行后的結(jié)果是()。defsub(n):ifn<=1:return1else:returnn-sub(n-1)s=sub(5)print("{}".format(s))A.0B.1C.2D.3D例7.3-3編寫程序,利用遞歸調(diào)用方式計(jì)算兩整數(shù)m、n的最大公約數(shù)(其中m>n,且n≠0)。分析:本例采用輾轉(zhuǎn)相除法來計(jì)算兩個(gè)數(shù)m,n的最大公約數(shù)。過程:m除以n,如余數(shù)r=0,則n就是最大公約數(shù)。如r≠0,則m←n,n←r,再重復(fù)上述過程,直到r=0為止,這時(shí)的n就是要求的最大公約數(shù).

例:m=112,n=77

被除數(shù)除數(shù)商余數(shù)

112/7713577/352735/750本問題的特點(diǎn)是要多次處理同一個(gè)問題,只是處理所用數(shù)據(jù)不同,且后一次所用數(shù)據(jù)為前一次處理的結(jié)果,正好用遞歸。源程序代碼deffact(m,n):ifn==0:returnmelse:returnfact(n,n%m)if__name__=="__main__":m,n=eval(input("請(qǐng)輸入n,m的值:"))s=fact(m,n)print("最大公約數(shù)為",s)程序運(yùn)行結(jié)果輸入m,n112,77↙兩個(gè)數(shù)的最大公約數(shù)為:7例7-3-4寫出以下遞歸函數(shù)程序的結(jié)果?defp(x,n):ifn==1:returnxelse:returnx*(1-p(x,n-1))print(p(2,3))程序運(yùn)行結(jié)果為:61、裝飾器本質(zhì)上是一個(gè)函數(shù),是用來包裝函數(shù)的函數(shù),經(jīng)常用于為已經(jīng)存在的函數(shù)添加額外的功能。7.4裝飾器(Decorator)7.4.1無參數(shù)裝飾器2、可將不同函數(shù)重復(fù)代碼提取出來,將其定義為裝飾器,然后由這些函數(shù)調(diào)用裝飾器,從而實(shí)現(xiàn)代碼的可重用性。defsquare_sum(x,y):returnx**2+y**2defsquare_diff(x,y):returnx**2-y**2print(square_sum(10,20))print(square_diff(10,20))程序運(yùn)行結(jié)果:500-300例:下面程序定義了求兩個(gè)數(shù)平方和與平方差的函數(shù)?,F(xiàn)在要在這兩個(gè)函數(shù)中增加輸出原始數(shù)據(jù)x,y功能。defsquare_sum(x,y):

print("原始數(shù)據(jù):",x,y)

returnx**2+y**2defsquare_diff(x,y):

print("原始數(shù)據(jù):",x,y)

returnx**2-y**2print(square_sum(10,20))print(square_diff(10,20))程序運(yùn)行結(jié)果:原始數(shù)據(jù):1020500原始數(shù)據(jù):1020-300defdeco(func):defnew_func(x,y):

print("原始數(shù)據(jù):",x,y)

returnfunc(x,y)returnnew_func@decodefsquare_sum(x,y):returnx**2+y**2@decodefsquare_diff(x,y):returnx**2-y**2print(square_sum(10,20))print(square_diff(10,20))采用改寫函數(shù)方法采用裝飾器方法#調(diào)用裝飾器#調(diào)用裝飾器defDECO(argv):#定義新的帶參數(shù)的裝飾器defdeco(func):#原來的deco裝飾器defnew_func(x,y):print(argv+"原始數(shù)據(jù):",x,y)#輸出原始數(shù)據(jù)returnfunc(x,y)returnnew_funcreturndeco7.4.2有參數(shù)裝飾器

@DECO('Sum')#調(diào)用帶參數(shù)裝飾器defsquare_sum(x,y):#計(jì)算兩個(gè)數(shù)的平方和returnx**2+y**2@DECO('Diff')#調(diào)用帶參數(shù)裝飾器defsquare_diff(x,y):#計(jì)算兩個(gè)數(shù)的平方差returnx**2-y**2print(square_sum(10,20))print(square_diff(10,20))程序運(yùn)行結(jié)果如下:Sum原始數(shù)據(jù):1020500Diff原始數(shù)據(jù):1020-300defdeco1(func):

print("deco1")returnfuncdefdeco2(func):print("deco2")returnfunc@deco2@deco1deffoo():print("foo")foo()程序運(yùn)行結(jié)果如下:deco1deco2foo7.4.3多重裝飾器多重裝飾器,即多個(gè)裝飾器修飾同一個(gè)函數(shù)。在一個(gè)函數(shù)體內(nèi)或語句塊內(nèi)定義的變量稱為局部變量,局部變量只在定義它的函數(shù)體或語句塊內(nèi)有效,而在定義它的函數(shù)體或語句塊之外不能使用它。7.5變量的作用域1、局部變量在函數(shù)定義之外定義的變量稱為全局變量,它可以被多個(gè)函數(shù)引用。2、全局變量例

閱讀下面程序,了解局部變量的作用域,觀察變量x、k和n的值。deffun(n):y=3k=2print("y=%d,k=%d,n=%d"%(y,k,n))returny+k+nfun(5)defmain():y=5k=6if(y>0):n=2*yelse:n=2*kprint("y=%d,k=%d,n=%d"%(y,k,n))main()y,k,n為局部變量,在函數(shù)fun內(nèi)部有效y,k,n為局部變量,在函數(shù)main內(nèi)部有效程序運(yùn)行結(jié)果y=3,k=2,n=5y=5,k=6,n=10s=1 deff1():print(s,k)k=10 deff2():print(s,k)f1()f2()例

閱讀下面程序,全局變量的作用域。#在函數(shù)外面定義全局變量s#在函數(shù)外面定義全局變量k變量s與k都是全局變量,在函數(shù)f1()和f2()中可以直接引用全局變量s和k。程序輸出結(jié)果為:1101101.以下程序代碼運(yùn)行后的結(jié)果正確的是()。deffun():a=3b=9fun()print(a+b)A.3B.12C.9D.運(yùn)行時(shí)出錯(cuò)D2.以下程序代碼的運(yùn)行結(jié)果正確的是()。a=10b=6deffun():a=13b=10fun()print(a+b)A.16B.10C.13D.23Adefchange(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)print('After:',num,string,lst)After:10Hello[1,2,3]程序運(yùn)行結(jié)果:例7-5-1閱讀如下程序,分析程序運(yùn)行結(jié)果#在函數(shù)中修改局部對(duì)象不會(huì)改變?cè)嫉膶?shí)參值。Before:10Hello[1,2,3]Inside:5GoodBye[4,5,6]defchange(lst,dict):lst[0]=10dict['a']=10print('Insidelst={},dict={}'.format(lst,dict))dict={'a':1,'b':2,'c':3}lst=[1,2,3,4,5]print('Beforelst={},dict={}'.format(lst,dict))change(lst,dict)print('Afterlst={},dict={}'.format(lst,dict))例7-5-2閱讀如下程序,分析程序運(yùn)行結(jié)果Afterlst=[10,2,3,4,5],dict={'c':3,'a':10,'b':2}程序運(yùn)行結(jié)果如下:對(duì)于可變列表或字典類型,局部區(qū)域的值是可以改變。Beforelst=[1,2,3,4,5],dict={'c':3,'a':1,'b':2}Insidelst=[10,2,3,4,5],dict={'c':3,'a':10,'b':2}若想在函數(shù)內(nèi)部使用局部變量對(duì)函數(shù)外的全局變量進(jìn)行修改,可以函數(shù)內(nèi)部將其聲明其為global變量,聲明為global變量后,則局部變量變?yōu)槿至?,以改變其值。?-5-3.以下程序代碼的運(yùn)行結(jié)果正確的是()。a=10b=5deffun(b):globalaa=20b=b+afun(6)print("{},{}".format(a,b))A)20,26B)20,5C)10,5D)10,25B3、關(guān)鍵字global聲明變量deff():globalx

#說明x為全局變量x=30y=40

#定義局部變量yprint("No2:",x,y)x=10

#定義全局變量xy=20

#定義全局變量yprint("No1:",x,y)f()print("No3:",x,y)No3:3020例7-5-4

寫出以下程序輸出結(jié)果。程序輸出結(jié)果如下:No1:1020No2:3040deff():globalxx='ABC'defg():globalxx+='abc'returnxreturng()print(f())例7-5-5

寫出程序的輸出結(jié)果。ABCabc程序輸出結(jié)果如下:Python提供了大量標(biāo)準(zhǔn)庫模塊,包括包括random、math、time和datetime、Internet編程、圖形繪制、圖形用戶界面創(chuàng)建庫等,這些為應(yīng)用程序開發(fā)提供了強(qiáng)大支持。7.6模塊7.6.1模塊的定義與使用1.標(biāo)準(zhǔn)庫模塊2.用戶自定義模塊除標(biāo)準(zhǔn)庫模塊外,用戶也可以自定義一個(gè)模塊。定義一個(gè)模塊實(shí)質(zhì)上是建立一個(gè)Python程序文件。defpows(n):y=10**nreturny下面是一個(gè)簡(jiǎn)單的模塊,程序文件名為support.py。from模塊名import項(xiàng)目名1[,項(xiàng)目名2[,……,項(xiàng)目名n]]Python的from語句可以從一個(gè)模塊中導(dǎo)入特定項(xiàng)目。也可以通過”from模塊名import*”語句導(dǎo)入模塊的所有項(xiàng)目??梢酝ㄟ^執(zhí)行import語句導(dǎo)入Python模塊1000>>>importsupport>>>support.pows(3)>>>fromsupportimportpows>>>pows(2)100例7-6-1

創(chuàng)建一個(gè)fibo.py模塊,其中包含兩個(gè)求Fibonacci數(shù)列的函數(shù),然后導(dǎo)入該模塊并調(diào)用其中的函數(shù)。deffib1(n):a,b=0,1whileb<n:print(b,end='')a,b=b,a+bprint()deffib2(n):result=[]a,b=0,1whileb<n:result.append(b)a,b=b,a+breturnresult首先創(chuàng)建一個(gè)fibo.py模塊。1123581321345589144233377610987導(dǎo)入這個(gè)模塊:>>>importfibo這里并沒有把直接定義在fibo模塊中的函數(shù)名稱寫入到語句中,所以需要使用模塊名來調(diào)用函數(shù)。也可以一次性把模塊中的所有函數(shù),直接調(diào)用函數(shù)。1123581321345589144233377>>>fibo.fib1(1000)>>>fromfiboimport*>>>fib1(500)>>>fibo.fib2(300)[1,1,2,3,5,8,13,21,34,55,89,144,233]7.6.3模塊的有條件執(zhí)行Python中,模塊本身也是一個(gè)程序文件,而程序文件是可以直接執(zhí)行的。那么,我們?nèi)绾蝸韰^(qū)分模塊是被調(diào)用還是直接運(yùn)行呢?每個(gè)模塊都有一個(gè)名稱,Python中有一個(gè)特殊變量__name__,它是一個(gè)全局變量,其可以獲取每個(gè)模塊的名稱。若模塊是被其他模塊導(dǎo)入,__name__取值是模塊本身的名稱若模塊文件是被用戶直接執(zhí)行,則__name__的取值是字符串“__main__”因此,可以通過__name__變量,可將一個(gè)模塊既當(dāng)作普通模塊庫供其他模塊調(diào)用,又可當(dāng)作一個(gè)執(zhí)行文件進(jìn)行執(zhí)行。用import導(dǎo)入m.py時(shí),__name__變量的值是模塊名m,則不執(zhí)行test()函數(shù)調(diào)用。deftest():print(__name__

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論