《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》課件 05函數(shù)_第1頁
《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》課件 05函數(shù)_第2頁
《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》課件 05函數(shù)_第3頁
《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》課件 05函數(shù)_第4頁
《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》課件 05函數(shù)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python程序設(shè)計(jì)基礎(chǔ)第5章函數(shù)教師:XXX第5章

函數(shù)5.1函數(shù)定義5.2函數(shù)調(diào)用與參數(shù)5.3變量的作用域5.4lambda表達(dá)式5.5生成器函數(shù)5.6函數(shù)遞歸調(diào)用5.7Python的第三方庫5.1函數(shù)定義函數(shù)是完成特定功能的一段封裝代碼。Python可用的函數(shù)主要有三種來源:1.內(nèi)置函數(shù):位于python內(nèi)核,啟動(dòng)python后就可直接使用的函數(shù),如abs,max,len等。dir(__builtin__)#列出內(nèi)置函數(shù),第1個(gè)從abs開始2.模塊內(nèi)的函數(shù):需先加載模塊,再以"模塊.函數(shù)"的形式調(diào)用。例如importmath;math.sqrt3.自定義函數(shù):用戶自行用def語句定義的函數(shù),完成用戶所需的特定功能。本章主要討論此類函數(shù)。5.1函數(shù)定義功能獨(dú)立且需多次執(zhí)行的一組語句可作為一個(gè)整體封裝起來形成一個(gè)函數(shù)。函數(shù)定義的一般形式為:def函數(shù)名(形參):'''函數(shù)說明部分'''#函數(shù)名下可附加一個(gè)可選的說明

函數(shù)體return值

defsquarediff(a,b): #定義平方差函數(shù),a,b:形式參數(shù)'''功能:求平方差;a,b:浮點(diǎn)數(shù)'''d=a*a-b*breturndx=squarediff(5,3) #5,3實(shí)際參數(shù)print(squarediff(6,2))print(squarediff.__doc__) #輸出函數(shù)說明部分函數(shù)命名要符合見名知義的原則。建議函數(shù)名下方附帶一個(gè)簡短的說明,該說明可用"函數(shù).__doc__"的形式訪問,便于了解函數(shù)功能。5.1函數(shù)定義函數(shù)可以沒有參數(shù),這樣的函數(shù)稱為無參函數(shù)。無參函數(shù)的定義形式為:def函數(shù)名():#即使無參,括號(hào)也不能省略

函數(shù)體defsayBye():#定義print('IlovePython')print("GoodBye!")for_inrange(3):sayBye()#調(diào)用5.1函數(shù)定義函數(shù)通過return語句返回計(jì)算結(jié)果。例如:使用return時(shí)注意如下3種情況:(1)return語句可省略。如沒有return,則默認(rèn)返回Nonedefwelcome():print("Welcome...")welcome()x=welcome()#無返回值,就不要寫為變量=函數(shù)(),

會(huì)導(dǎo)致x為None例如列表排序lst.sort()方法就無返回值,不能寫為lst=lst.sort()defmySum(a,b):'''計(jì)算并返回兩個(gè)輸入?yún)?shù)的和'''

returna+b5.1函數(shù)定義(3)多個(gè)return語句函數(shù)體中可以有多個(gè)return語句,當(dāng)執(zhí)行其中任意一個(gè)return語句后,該函數(shù)的執(zhí)行就結(jié)束了。(2)return語句指定返回多個(gè)值函數(shù)也可返回多個(gè)值。將多個(gè)值放在return的后面,逗號(hào)分隔。defmulti(a,b):returna+b,a-b#實(shí)質(zhì)是返回一個(gè)元組yz=multi(4,5)#yz=(9,-1)m,n=multi(4,5)#m=9,n=-1deffun(a,b): ifa<b: returnb-a elifa>b: returna-b return05.1函數(shù)定義為了給使用者明確的指引,函數(shù)定義時(shí)可用下面的語法說明參數(shù)與返回值的類型。在函數(shù)調(diào)用時(shí)起到提示作用,但非強(qiáng)制約束。defmySum(a:int,b:int)->int:#形參和返回值均為int型'''計(jì)算并返回兩個(gè)整型參數(shù)的和'''returna+b調(diào)用自己編寫的函數(shù)上面定義的若干函數(shù)假定保存在mytool.py源文件中,一個(gè).py文件既是一個(gè)模塊。若其它程序要調(diào)用此模塊中的函數(shù),需要先導(dǎo)入模塊:importmytoolmytool.mySum(10,20)mytool.welcome()如要導(dǎo)入的模塊文件不在當(dāng)前目錄或系統(tǒng)目錄中,則可按如下方法設(shè)置模塊搜索路徑sys.path,該路徑是目錄列表,用于引導(dǎo)搜索模塊。importsyssys.path.append('d:/tools')#假定mytool.py保存在d:/tools目錄中importmytool#先添加搜索路徑,再import,確保找到該模塊5.2函數(shù)調(diào)用與參數(shù)5.2.1函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)際參數(shù))注:函數(shù)調(diào)用時(shí)一定要有小括號(hào)。沒有小括號(hào)不會(huì)報(bào)告語法錯(cuò)誤,但這不是調(diào)用函數(shù),相當(dāng)于給函數(shù)一個(gè)別名。d=minus#缺失括號(hào),相當(dāng)于給minus起了個(gè)別名dc=d(8,3)#此處的d等同于minus函數(shù)defminus(a,b):#定義returna-bc=minus(8,3)#調(diào)用5.2函數(shù)調(diào)用與參數(shù)5.2.1

函數(shù)調(diào)用的一般形式函數(shù)調(diào)用時(shí),暫停主程序執(zhí)行,轉(zhuǎn)去執(zhí)行被調(diào)用函數(shù)。被調(diào)用函數(shù)執(zhí)行完后返回原調(diào)用處繼續(xù)向下執(zhí)行。如下圖:defcallee(): print("被調(diào)用函數(shù)執(zhí)行")#主程序如下:print("調(diào)用函數(shù)之前")callee()print("調(diào)用函數(shù)之后")執(zhí)行主程序的輸出如下:5.2函數(shù)調(diào)用與參數(shù)5.2.2

不可變對象和可變對象參數(shù)Python數(shù)據(jù)類型分為不可變數(shù)據(jù)和可變數(shù)據(jù)。數(shù)值、字符串和元組是不可變對象;列表、集合和字典是可變對象(3.5節(jié))。不可變是指不可修改原內(nèi)存單元的數(shù)據(jù)。不可變對象作為函數(shù)實(shí)參時(shí),如果在函數(shù)體內(nèi)改變形參的值,不會(huì)導(dǎo)致實(shí)參值發(fā)生改變。defchange(a):a=a+1print("a=",a)b=4change(b)print("b=",b)#b的值不變輸出如下:a=5b=45.2函數(shù)調(diào)用與參數(shù)可變對象作為函數(shù)實(shí)參時(shí),在函數(shù)體內(nèi)改變形參將導(dǎo)致實(shí)參發(fā)生改變。例如:程序的輸出如下:defchangeList(a):foriinrange(len(a)):a[i]=a[i]*2print("a=",a)b=[1,2,3]print("b=",b)changeList(b)print("b=",b) #b被改變了5.2函數(shù)調(diào)用與參數(shù)5.2.3

默認(rèn)值參數(shù)定義函數(shù)時(shí),可以為形參設(shè)置默認(rèn)值。設(shè)置默認(rèn)值可以簡化函數(shù)調(diào)用。Python的很多函數(shù)都有默認(rèn)值參數(shù)。例如:int('11',base=10),sorted(lst,reverse=False)等。def函數(shù)名(…,形參名=默認(rèn)值):

函數(shù)體defdefaultPara(a,b=1):print("a={},b={}".format(a,b))defaultPara(2) #調(diào)用,b未傳值則取默認(rèn)值defaultPara(2,3) #也可傳值,則以實(shí)參為準(zhǔn)定義默認(rèn)值參數(shù)時(shí),默認(rèn)值參數(shù)的右邊不能再出現(xiàn)沒有默認(rèn)值的參數(shù)。deff(x,y=10,z)#錯(cuò)誤,y的右邊不能再出現(xiàn)沒有默認(rèn)值的z5.2函數(shù)調(diào)用與參數(shù)5.2.4

關(guān)鍵字參數(shù)通過關(guān)鍵字(命名)參數(shù),在調(diào)用時(shí)指定形參的名字,可以實(shí)現(xiàn)實(shí)參不按照形參的順序書寫,不用記憶形參順序,調(diào)用格式易于理解。defkeyPara(a,b,c):print(a+b*c)print("a={},b={},c={}".format(a,b,c))keyPara(1,2,3)#如果keyPara(3,2,1)結(jié)果不同#使用關(guān)鍵字參數(shù),按如下幾種方式調(diào)用,效果相同:keyPara(a=1,b=2,c=3)keyPara(c=3,b=2,a=1)keyPara(1,b=2,c=3)keyPara(1,b=2,3)#這種格式錯(cuò)誤,關(guān)鍵字參數(shù)后面不能再有位置參數(shù)5.2函數(shù)調(diào)用與參數(shù)5.2.5

不定長參數(shù)定義函數(shù)時(shí)如不能確定形參的數(shù)量,那么可定義不定長參數(shù),這樣增加了程序調(diào)用的靈活性。例max(2,5,10);max(1,10,5,20,9)不定長參數(shù)的定義形式有兩種。第一種形式如下:def函數(shù)名(*形參名):#注意*表示不定長

函數(shù)體系統(tǒng)將傳遞進(jìn)來的任意數(shù)量的實(shí)參組合成一個(gè)元組傳給形參。defmySum(*p):print(type(p))#p實(shí)際為元組print(sum(p))mySum(1,3,5)mySum(2,4,6,8,10)5.2函數(shù)調(diào)用與參數(shù)第二種定義不定長參數(shù)的形式如下:def函數(shù)名(**形參名):#**視為字典

函數(shù)體系統(tǒng)將傳遞進(jìn)來的任意數(shù)量的、顯式賦值的關(guān)鍵字實(shí)參組合成一個(gè)字典傳給形參。defvarPara(**p):foritinp.items():#p是字典print(it)varPara(a=1,b=2,c=3) #必須全部按關(guān)鍵字參數(shù)格式傳遞varPara(name='john',age=20,score=90)#varPara(1,b=2,c=3) #將報(bào)錯(cuò),因?yàn)?不是關(guān)鍵字參數(shù)格式5.2函數(shù)調(diào)用與參數(shù)5.2.6

實(shí)參序列解包實(shí)參序列解包是指當(dāng)函數(shù)具有多個(gè)形參時(shí),可以使用列表、元組、集合及其他可迭代對象作為實(shí)參,并在實(shí)參名稱前面加上一個(gè)星號(hào)*,Python將自動(dòng)對實(shí)參序列解包,將序列中的值分別傳遞給形參。如果實(shí)參是字典,那么需加兩個(gè)星號(hào)**。defvarPara(x,y,z):print("Thesumis{}".format(x+y+z))#以下兩行代碼實(shí)現(xiàn)對列表解包a=[1,2,3]varPara(*a)#個(gè)數(shù)要匹配,如寫為varPara(a[0],a[1],a[2])較繁瑣#varPara(a)#錯(cuò)誤#以下兩行代碼實(shí)現(xiàn)對字典解包dic={'x':1,'y':2,'z':3}varPara(**dic)#要求字典的鍵名必須和形參名一致5.2函數(shù)調(diào)用與參數(shù)函數(shù)練習(xí)1.編寫具有默認(rèn)值參數(shù)的求和函數(shù)sum1,默認(rèn)求[1,100]區(qū)間的和。2.編寫不定長參數(shù)求平均值的函數(shù)avg。例如:#avg(1,2,3)#返回2.0,avg(2,4,6,8,10)#返回6.0defavg(*p):returnsum(p)/len(p)defsum1(m=1,n=100):returnsum(range(m,n+1))3.編寫學(xué)生信息輸出函數(shù),可對傳入的任何學(xué)生信息對進(jìn)行輸出。defoutstu(**di):fork,vindi.items():print(k,v)

outstu(id='1',name='張')outstu(classid='2',name='李',score=90)補(bǔ)充:函數(shù)參數(shù)中新增的特殊的/和*字符此處的/和*本身不是參數(shù),但有特定含義:/表示/前面的參數(shù)a,b只能用位置參數(shù),不能用關(guān)鍵字參數(shù)*表示*后面的參數(shù)d,e只能用關(guān)鍵字參數(shù)/和*中間的參數(shù)c用位置參數(shù)和關(guān)鍵字參數(shù)均可fun(1,2,3,d=4,e=5)#正確fun(1,2,3,4,5)#錯(cuò)誤,*后面的參數(shù)d,e必須用關(guān)鍵字參數(shù)#錯(cuò)誤,/前面的參數(shù)a,b必須是位置參數(shù),不能是關(guān)鍵字參數(shù)形式fun(a=1,b=2,c=3,d=4,e=5)deffun(a,b,/,c,*,d,e):returna+b*c+d*e5.3變量的作用域變量作用域是指變量起作用的范圍,它由定義變量的位置決定。不同作用域內(nèi)的變量互不影響。變量分為局部變量和全局變量。局部變量是在函數(shù)內(nèi)部賦值的變量,只在該函數(shù)內(nèi)部起作用,作用范圍從定義位置開始到函數(shù)結(jié)束。例如:deflocal():a=3 #局部變量print('local內(nèi)a=',a) deffun():a=4 #局部變量print('fun內(nèi)a=',a) local()fun()#print('主程序:',a) #將報(bào)錯(cuò),主程序中無法訪問局部變量a5.3變量的作用域全局變量是指在函數(shù)外部定義的變量,或是在函數(shù)內(nèi)用global關(guān)鍵字特別申明的變量。其作用范圍從定義該變量的位置開始到程序結(jié)束。例如:如果要在函數(shù)體內(nèi)部修改全局變量a的值,那么要用關(guān)鍵字global申明變量a。例如:牢記:在函數(shù)內(nèi)部被賦值,但又沒有被global申明的變量都是局部變量。a=5 #全局變量defglob():b=a #使用了全局變量a,此處的b局部print("a={},b={}".format(a,b))glob()a=5defglob():globala #聲明此處的a是全局變量a=4glob()print("a={}".format(a))#將輸出a=45.3變量的作用域全局和局部概念練習(xí)defm():b.append(1)b=[]m()m()print(b)#輸出?defm():globalbb=b+1b=2m();m()print(b)#輸出?defm():

b=b+1#b局部b=2m();m()print(b)#為何報(bào)錯(cuò)?defm():c=b+1#b全局print(c)b=2m();m()5.4lambda表達(dá)式lambda表達(dá)式用于定義匿名函數(shù)。有時(shí)我們需要使用一個(gè)函數(shù),但可能僅使用一次,在這種場合下,無需正式定義一個(gè)普通函數(shù),用lambda定義一個(gè)匿名函數(shù)即可。格式為lambda形參:表達(dá)式fromrandomimportrandint,

seeddefst(x):returnx**2seed(1)a=[randint(-10,10)for_inrange(10)]#列表a含正數(shù)和負(fù)數(shù)print('排序前:',a)a.sort(key=st) #根據(jù)數(shù)據(jù)的平方值排序(方法1)a.sort(key=lambdax:x**2) #用lambda表達(dá)更簡潔(方法2)print('排序后:',a)5.4lambda表達(dá)式#對學(xué)生列表排序的例子stu=[('B',90,85),('A',80,92),('C',85,85),('D',99,89)]s1=sorted(stu,key=lambdax:x[1]) #按成績1排序s2=sorted(stu,key=lambdax:x[2]) #按成績2排序s=sorted(stu) #按姓名字母排序也可以將lambda表達(dá)式變成命名函數(shù),格式如下:

函數(shù)名=lambda形參:表達(dá)式f=lambdax,y:x+yprint(f(2,3))注意:lambda表達(dá)式很簡單,只支持單條語句,不支持條件和循環(huán)。5.5生成器函數(shù)生成器函數(shù)是一種內(nèi)含yield語句的特殊函數(shù),用于創(chuàng)建生成器對象。生成器對象特點(diǎn):1.惰性機(jī)制(數(shù)據(jù)延遲生成),2.節(jié)省內(nèi)存。例如需產(chǎn)生10萬個(gè)數(shù)據(jù),普通函數(shù)要將10萬個(gè)數(shù)據(jù)都產(chǎn)生并返回,內(nèi)存耗費(fèi)較大,而采用生成器對象可以每次只生成1個(gè),處理后再生成下一個(gè),節(jié)省內(nèi)存。defg():#生成器函數(shù)a=1whileTrue:

yielda #利用yield關(guān)鍵字返回?cái)?shù)據(jù),不再使用returna=a+2

c=g()#c是生成器對象

print(type(c))#類型為generatorforiinrange(20):print(next(c),end='')#使用內(nèi)建next函數(shù)獲取數(shù)據(jù),輸出前20個(gè)奇數(shù)yield語句返回一個(gè)值并暫停函數(shù)的運(yùn)行,下次通過內(nèi)置函數(shù)next或for循環(huán)遍歷生成器對象時(shí)再恢復(fù)執(zhí)行,并從yield語句的后一條語句繼續(xù)執(zhí)行。5.5嵌套定義、修飾器和生成器函數(shù)練習(xí):python原有的range函數(shù)不支持小數(shù)步長,要求自定義range2生成器函數(shù),模仿range的工作方式并能支持小數(shù)步長。defrange2(start=0,stop=10,step=1):#生成器函數(shù)whilestart<stop:yieldstart

start=start+stepforxinrange2(1,5,0.5):print(x,end='')輸出:5.6函數(shù)遞歸調(diào)用一個(gè)函數(shù)自己調(diào)用自己稱為遞歸調(diào)用。利用遞歸可實(shí)現(xiàn)巧妙的算法設(shè)計(jì)。遞歸可分為:直接遞歸和間接遞歸。遞歸一定要注意終止遞歸的條件。直接遞歸就是一個(gè)函數(shù)直接調(diào)用該函數(shù)自身。如下:間接遞歸就是一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù),該函數(shù)又調(diào)用原函數(shù)。如下:deff():

g()

defg():

f()

deff():

f()

5.6函數(shù)遞歸調(diào)用【例1】編寫遞歸函數(shù),傳入自然數(shù)n,返回其階乘

n!。deff(n):ifn==1: return1 #不再遞歸returnn*f(n-1) #遞歸

n=eval(input("Inputaninteger:"))fac=f(n)print("{}!={}".format(n,fac))f(4)=4*f(3)f(3)=3*f(2)f(2)=2*f(1)f(1)=1類比數(shù)列anan-1an-2..a1,遞歸要正/反向遞推兩次注意:要防止無限遞歸maximumrecursiondepth5.6函數(shù)遞歸調(diào)用【例2】編寫遞歸函數(shù)f(n),把十進(jìn)制整數(shù)n轉(zhuǎn)換為二進(jìn)制數(shù)輸出。分析:設(shè)整數(shù)n的二進(jìn)制數(shù)為M,n//2的二進(jìn)制數(shù)為N,則M=N*2+n%2。這樣,就將求整數(shù)n的二進(jìn)制數(shù)的問題分解為兩個(gè)問題:求n//2的二進(jìn)制數(shù)和求n%2。第二個(gè)問題比較簡單,可以直接得到結(jié)果。第一個(gè)問題(求n//2的二進(jìn)制數(shù))與原問題有著相似的結(jié)構(gòu),即求一個(gè)整數(shù)的二進(jìn)制數(shù)只是將整數(shù)變?yōu)樵瓉淼囊话?。因此,這個(gè)問題適合用遞歸的方法求解。deff(n):ifn==0:#當(dāng)n為0或1時(shí),無須再遞歸,可返回'0'或'1'return'0'elifn==1:return'1't=n%2#余數(shù)n=n//2#整除,得到nreturnf(n)+str(t)#遞歸調(diào)用n=eval(input("Inputaninteger:"))fac=f(n)print("{}={}".format(n,fac))5.6函數(shù)遞歸調(diào)用【例3】編寫遞歸函數(shù)flat(*p,lst),將一個(gè)嵌套多層的可迭代對象p轉(zhuǎn)為一維列表lst。fromcollections.abcimportIterable#引入可迭代類型Iterabledefflat(*p,lst):forxinp:ifisinstance(x,Iterable): #判斷x是否是可迭代對象

flat(*x,lst=lst) #如是則實(shí)參序列解包,遞歸調(diào)用

else:lst.append(x)lst=[]data=[1,[[2,3],[4,5]],[[[6]]],range(7,9),(9,10)]#嵌套多層flat(*data,lst=lst)print(lst)列表、元組等都是可迭代的,用isinstance([4,5],Iterable)測試結(jié)果為True5.6函數(shù)遞歸調(diào)用遞歸練習(xí):用遞歸寫一個(gè)求和函數(shù),可傳入任意個(gè)數(shù)的參數(shù)。fromcollections.abcimportIterabledefsum2(*p):#第2版iflen(p)==0: return0else:ifisinstance(p[0],Iterable):#判斷p[0]是否可迭代returnsum2(*p[0])+sum2(*p[1:])else:returnp[0]+sum2(*p[1:])defsum1(*p):#第1版iflen(p)==1: returnp[0]else:returnp[0]+sum1(*p[1:])注:sum1參數(shù)只能是數(shù)值,不能是列表和元組。sum1(3,4,5)#正確sum1(3,4,[5,6])#將報(bào)錯(cuò)注:sum2()參數(shù)可以是數(shù)值,列表,元組和range。例如sum2(1,[2,3],range(4,6))注:求和可看作第0個(gè)元素(p[0])加后面所有元素(p[1:])5.7Python的第三方庫5.7.1

jieba庫在進(jìn)行文字分析時(shí),分詞是必做的工作。英文由于以空格為分隔,可以用s.split()分詞,但split()無法對中文分詞。jieba庫的作用就是對中文文章進(jìn)行分詞,得到中文詞語列表。安裝命令如下:pipinstalljieba分詞時(shí)cut()方法返回生成器對象,lcut()方法直接返回分詞列表。cut_all=True表示全模式分詞,字符串中的所有可能詞語都會(huì)被提取出來。cut_all=False(默認(rèn))表示精確模式,只提取字符串中最長的詞語。本節(jié)介紹Python程序設(shè)計(jì)二級(jí)考試要求的幾個(gè)第三方庫,以便掌握二級(jí)考試要求的考核內(nèi)容importjiebas='我在北京大學(xué)'obj=jieba.cut(s,cut_all=False)#cut返回生成器對象,不是列表list(obj) #['我','在','北京大學(xué)']jieba.lcut(s,cut_all=True)#['我','在','北京','北京大學(xué)','大學(xué)']5.7Python的第三方庫【例3】有字符串s,編程采用精確模式和HMM模型對該字符串進(jìn)行分詞,輸出每個(gè)詞及其在字符串中出現(xiàn)的頻數(shù),每個(gè)詞只輸出一次。importjiebas="編程語言可分為低級(jí)語言和高級(jí)語言,Python是高級(jí)語言。"lst=jieba.lcut(s,HMM=True)b=[]forvinlst: ifvnotinb: b.append(v) print(v,"\t",lst.count(v))lst內(nèi)容如下,標(biāo)點(diǎn)符號(hào)和空格都會(huì)占單獨(dú)一項(xiàng)。['編程語言','可','分為','低級(jí)語言','和','高級(jí)','語言',',','Python','是','高級(jí)','語言','。']5.7Python的第三方庫5.7.2

wordcloud庫wordcloud庫的功能是將一組給定的詞語按照詞頻轉(zhuǎn)換為一張?jiān)~云圖片,高頻詞占比較大,從而凸顯文章大意。安裝命令:pipinstallwordcloud使用wordcloud庫來生成詞云圖,基本分三步:fromwordcloudimportWordCloud#注意大小寫#第一步:構(gòu)造一個(gè)WordCould對象wc=WordCloud(width=1000,height=800,background_color='white')#第二步:利用該對象的generate()方法生成詞云圖wc.generate(字符串s)#s必須是用空格分隔的串,例如'AA

BB

AA

CC'#第三步:利用該對象的to_file()方法將詞云圖保存為圖片文件(png,jpg等)wc.to_file('tu.png')5.7Python的第三方庫#英文詞云圖示例fromwordcloudimportWordClouds='Withtheimprovingofsemiconductortechnology,asinglechipintegratesmoreandmoreprocessingcores.Highlyparallelapplicationsaredistributedtotensofprocessingunits.Theinter-processorcommunicationdelaybecomesmoreandmoreimportantforparallelapplications.'wc=WordCloud(background_color='white',width=1000,height=800)wc.generate(s)wc.to_file('wc.png')#生成的圖片默認(rèn)保存在程序所在的目錄#在IPython中執(zhí)行下面命令可顯示圖片fromIPython.displayimportImageImage('wc.png')5.7Python的第三方庫中文文章首先用jieba分詞,再用空格連接分詞,得到以空格分隔的字符串,然后用WordCloud生成詞云,生成時(shí)要指定中文字體。importjiebastring='編寫程序就是用計(jì)算機(jī)語言實(shí)現(xiàn)算法的過程。可以證明,任何問題都可以由三種基本結(jié)構(gòu)表達(dá)出來。這三種基本結(jié)構(gòu)包括順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。'words=jieba.lcut(string)#先分詞jbstr=''.join(words)#用空格將分詞列表連接為字符串,''內(nèi)有空格wc=WordCloud(font_path='simkai.ttf',background_color='white',width=500,height=400)#楷體,指定中文字體wc.generate(jbstr)#生成詞云wc.to_file('wc2.png')#存為wc2.png5.7Python的第三方庫5.7.4

turtle庫turtle庫是Python內(nèi)含的一個(gè)簡易繪圖庫,可直接使用。它通過模擬一只烏龜在畫板上爬行來繪制圖形,適合初學(xué)者練習(xí)編程。畫板采用笛卡兒坐標(biāo)系,原點(diǎn)(0,0)位于畫板中央。初始,烏龜位于原點(diǎn),朝向X軸的正方向(0度)。只需設(shè)定畫筆的方向(常用seth/left/right)和前進(jìn)距離(fd),就能沿指定方向繪制一條直線或曲線。距離單位為像素。#畫一個(gè)邊長200像素的矩形importturtleastfor_inrange(4):t.fd(200) #繪制200像素長的線條t.right(90) #每繪一條線就右轉(zhuǎn)90度t.done() #結(jié)束繪圖,spyder中需要此句turtle和Spyder不太兼容,運(yùn)行時(shí)每兩次會(huì)報(bào)一次Terminator錯(cuò)。同樣的代碼在IDLE中沒問題。建議在IDLE中調(diào)試turtle代碼。官方教程/3/library/turtle.html32145.7Python的第三方庫5.7.4

turtle庫(常用函數(shù))forward()或fd():向前移動(dòng)指定的距離,參數(shù)為數(shù)值,單位像素。backward()或bk():向后移動(dòng)指定的距離。right()或rt():以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論