Python數(shù)據(jù)分析與應用 課件 第5、6章 函數(shù)和模塊;Python網(wǎng)絡爬蟲_第1頁
Python數(shù)據(jù)分析與應用 課件 第5、6章 函數(shù)和模塊;Python網(wǎng)絡爬蟲_第2頁
Python數(shù)據(jù)分析與應用 課件 第5、6章 函數(shù)和模塊;Python網(wǎng)絡爬蟲_第3頁
Python數(shù)據(jù)分析與應用 課件 第5、6章 函數(shù)和模塊;Python網(wǎng)絡爬蟲_第4頁
Python數(shù)據(jù)分析與應用 課件 第5、6章 函數(shù)和模塊;Python網(wǎng)絡爬蟲_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章

函數(shù)和模塊《Python數(shù)據(jù)分析與應用》①程序結構清晰,可讀性好。②減少重復編碼的工作量。③可多人共同編制一個大程序,縮短程序設計周期,提高程序設計和調試的效率。使用函數(shù)的好處1概述

函數(shù)是一組實現(xiàn)某一特定功能的語句集合,是可以重復調用、功能相對獨立完整的程序段。函數(shù)的定義與調用定義一般形式:def

函數(shù)名([形式參數(shù)表]):函數(shù)體

[return表達式]采用def關鍵字定義函數(shù),不需要指定返回值的類型;函數(shù)的參數(shù)不限,不需要指定參數(shù)類型;參數(shù)括號后面的冒號“:”必不可少;函數(shù)體相對于def關鍵字必須保持一定的空格縮進;return語句是可選的;允許定義函數(shù)體為空的函數(shù)。函數(shù)定義時要注意一般形式:函數(shù)名([實際參數(shù)表])函數(shù)的調用說明實參可以是常量、變量、表達式、函數(shù)等,但在進行函數(shù)調用時必須有確定的值。函數(shù)的實參和形參應在個數(shù)、類型和順序上一一對應。對于無參函數(shù),調用時實參表列為空,但()不能省。例:編寫函數(shù),求3個數(shù)中的最大值。defgetMax(a,b,c):ifa>b:max=aelse:max=bif(c>max):max=creturnmaxa,b,c=eval(input("inputa,b,c:"))n=getMax(a,b,c)print("max=",n)在Python中不允許前向引用,即在函數(shù)定義之前,不允許調用該函數(shù)。函數(shù)的參數(shù)和函數(shù)的返回值形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名實際參數(shù):調用函數(shù)時函數(shù)名后面括號中對應的參數(shù)說明實參可以是常量、變量和表達式,但必須在函數(shù)調用之間有確定的值。形參與實參個數(shù)相同形參定義時編譯系統(tǒng)并不為其分配存儲空間,也無初值;只有在函數(shù)調用時,臨時分配存儲空間,接受來自實參的值;函數(shù)調用結束,內(nèi)存空間釋放。參數(shù)傳遞方式單向的值傳遞實參和形參之間是單向的值傳遞。在函數(shù)調用時,將各實參表達式的值計算出來,賦給形參變量。因此,實參與形參必須類型相同或賦值兼容,個數(shù)相等,一一對應。在函數(shù)調用中,即使實參為變量,形參值的改變也不會改變實參變量的值。實參和形參占用不同的內(nèi)存單元傳地址方式

函數(shù)調用時,將實參數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參defswap(a,b):a,b=b,aprint("a=",a,"b=",b)x,y=eval(input("inputx,y:"))swap(x,y)print("x=",x,"y=",y)運行結果:inputx,y:3,5a=5b=3x=3y=5形式參數(shù)(形參)實際參數(shù)(實參)例如:編一程序,將主函數(shù)中的兩個變量的值傳遞給swap函數(shù)中的兩個形參,交換兩個形參的值。單向值傳遞defswap(a_list):a_list[0],a_list[1]=a_list[1],a_list[0]print("a_list[0]=",a_list[0],"a_list[1]=",a_list[1])x_list=[3,5]swap(x_list)print("x_list[0]=",x_list[0],"x_list[1]=",x_list[1])運行結果:a_list[0]=5a_list[1]=3x_list[0]=5x_list[1]=3例:傳地址方式。函數(shù)的返回值

指函數(shù)被調用、執(zhí)行完后,返回給主調函數(shù)的值。函數(shù)的返回語句一般形式

return表達式功能:

使程序控制從被調用函數(shù)返回到調用函數(shù)中,同時把返回值帶給調用函數(shù)defadd(a,b):c=a+b

x=add(3,20)print(x)說明

函數(shù)內(nèi)可有多條返回語句。如果沒有return語句,會自動返回NONE;如果有return語句,但是return后面沒有表達式也返回NONE。例:編寫函數(shù),判斷一個數(shù)是否是素數(shù)。defisprime(n):foriinrange(2,n):if(n%i==0):return0return1m=int(input("請輸入一個整數(shù):"))flag=isprime(m)if(flag==1):print("%d是素數(shù)"%m)else:print("%d不是素數(shù)"%m)參數(shù)分類必備參數(shù)默認參數(shù)關鍵參數(shù)不定長參數(shù)必備參數(shù)必備參數(shù)是指調用函數(shù)時,參數(shù)的個數(shù),參數(shù)的數(shù)據(jù)類型,以及參數(shù)的輸入順序必須正確,否則會出現(xiàn)語法錯誤。>>>defprintme(str):

print(str)

return>>>printme()Traceback(mostrecentcalllast):File"<pyshell#40>",line1,in<module>printme()TypeError:printme()missing1requiredpositionalargument:'str'默認參數(shù)

默認參數(shù)是指允許函數(shù)參數(shù)有缺省值,如果調用函數(shù)時不給參數(shù)傳值,參數(shù)將獲得缺省值。Python通過在函數(shù)定義的形參名后加上賦值運算符(=)和默認值,給形參指定默認參數(shù)值。注意:默認參數(shù)值是一個不可變的參數(shù)。defsay(message,times=1):

printmessage*times

#調用函數(shù)

say('Hello')#默認參數(shù)times為1

say('World',5)【程序運行如下所示】HelloWorldWorldWorldWorldWorld關鍵參數(shù)

函數(shù)的多個參數(shù)值一般默認從左到右依次傳入。Python也可以通過關鍵參數(shù)用于改變賦值順序,關鍵參數(shù)又稱命名參數(shù)。deffunc(a,b=5,c=10): print('ais',a,'andbis',b,'andcis',c)#調用函數(shù)func(3,5)func(25,c=24)func(c=50,a=100)【程序運行如下所示】ais3andbis5andcis10ais25andbis5andcis24ais100andbis5andcis50不定長參數(shù)

不定長參數(shù)又稱可變長參數(shù),若參數(shù)以一個*號開頭的代表著一個任意長度的元組,可以接收連續(xù)一串參數(shù)。參數(shù)以兩個*號開頭的代表著一個字典,參數(shù)的形式是“key=value”,接受連續(xù)任意多個參數(shù)。deffoo(x,*y,**z): print(x) print(y) print(z)輸入foo(1)輸入foo(1,2,3,4)輸入foo(1,2,3,a="a",b="b")匿名函數(shù)匿名函數(shù)是指不使用def語句定義一個函數(shù)。python使用lambda來創(chuàng)建匿名函數(shù)。lambda只是一個表達式,而不是一個代碼塊,比def簡單很多。lambda函數(shù)的形式如下: lambda[arg1[,arg2,.....argn]]:expression【例】lambda函數(shù)舉例sum=lambdaarg1,arg2:arg1+arg2;#調用sum函數(shù)print("相加后的值為:",sum(10,20))【程序運行如下所示】相加后的值為:30函數(shù)的遞歸調用

在函數(shù)的執(zhí)行過程中又直接或間接調用該函數(shù)本身

直接遞歸調用

在函數(shù)中直接調用函數(shù)本身間接遞歸調用

在函數(shù)中調用其它函數(shù),其它函數(shù)又調用原函數(shù)f()調f調f2調f1f1()f2()defa(x):……

z=b(y)…….return(2*z)defb(t):……

m=a(x)…….return(3+c)deff(x):……

z=f(y)…….return(2*z)遞歸算法的兩個基本特征遞推歸納將問題轉化為比原問題小的同類規(guī)模,歸納出一般遞推公式.

故所處理的對象要有規(guī)律地遞增或遞減遞歸終止當規(guī)模小到一定的程度應該結束遞歸調用,逐層返回常用條件語句來控制何時結束遞歸13十二月2024例求遞歸方法求n的階乘遞推歸納:遞歸終止:deffac(n):ifn==0:f=1else:f=fac(n-1)*n;returnfn=int(input("pleaseinputn:"))f=fac(n)print("%d!=%d"%(n,f))總結執(zhí)行過程(兩個階段)第一階段:逐層調用,調用函數(shù)自身第二階段:逐層返回,返回到調用該層的位置遞歸調用是多重嵌套調用的一種特殊情況調用的深度:調用的層數(shù)

前提:原問題可以層層分解為類似的子問題,且子問題比原問題規(guī)模更小規(guī)模最小的問題具有直接解方法:尋找分解方法:將原問題轉化為子問題求解,例:n!=n*(n-1)!設計遞歸出口:根據(jù)規(guī)模最小的子問題確定遞歸終止條件,例:求解n!,當n=0時,n!=1;設計遞歸算法的方法13十二月2024例:漢諾塔問題。設有三座塔座(A、B、C),在一個塔座(設為A)上有64個盤片,盤片不等,按大盤在下,小盤在上的順序依次疊放?,F(xiàn)要將A塔上的盤片借助于B塔,移到C塔上并保持同樣順序疊排,移動盤片時必須遵守以下規(guī)則:(1)每次只能移動一個圓盤;(2)圓盤可以插在A、B、C任意一個塔座上;(3)任何時候都不能將一個較大的圓盤放到較小的圓盤之上。13十二月2024

將A塔上的紅、黃兩盤移動到B上藍盤放到C上將紅、黃兩盤從B移動到C盤上。(完成)ABC問題分析:(1)n=1時,直接將其從A->C;(2)n>1時,只要先將前n-1個借助C從A->B,那么可以把第n個直接從A->C;(3)如何將剩下的n-1個圓盤遵守規(guī)則借助A從B->C,問題性質同(2);問題性質相同,因此適合采用遞歸過程!若將n個盤片按規(guī)定從A塔移至C塔,移動步驟可分為三步:把A塔上的n-1個盤片借助C移動到B塔把第n個盤片從A塔移至C塔把B塔上的n-1個盤片借助A塔移至C塔算法用函數(shù)hanoi(n,x,y,z)以遞歸算法實現(xiàn)13十二月2024盤片數(shù)源塔借用塔目標塔

遞歸終止:當遞歸調用到盤片數(shù)為1時算法描述:1)遞歸調用hanoi(n-1,a,c,b)2)將n號盤片從a塔移動到c塔3)遞歸調用hanoi(n-1,b,a,c)count=0defhanoi(n,x,y,z):globalcountifn==1:count+=1move(count,x,z)else:hanoi(n-1,x,z,y);

count+=1move(count,x,z)hanoi(n-1,y,x,z);

defmove(n,x,y):print("step%d:Movediskform%cto%c"%(count,x,y))m=int(input("Inputthenumberofdisks:"))print("Thestepstomoving%ddisks:"%m)hanoi(m,'A','B','C')模塊

將一些常用的功能單獨放置到一個文件中,方便其他文件來調用,這些文件即為模塊。

模塊分為如下:

標準庫模塊

用戶自定義模塊導入模塊導入模塊就是給出一個訪問模塊提供的函數(shù)、對象和類的方法。(1)引入模塊

import模塊(2)引入模塊中的函數(shù)

from模塊名import函數(shù)名(3)引入模塊中的所有函數(shù)from模塊名import*第6章Python網(wǎng)絡爬蟲《Python數(shù)據(jù)分析與應用》網(wǎng)絡爬蟲網(wǎng)絡爬蟲(WebSpider),又被稱為網(wǎng)頁蜘蛛或網(wǎng)絡機器人,通過一定的規(guī)則自動地抓取網(wǎng)絡信息。網(wǎng)絡爬蟲就是根據(jù)網(wǎng)址獲取網(wǎng)頁信息。例如,當輸入網(wǎng)址:/,瀏覽器向DNS服務器發(fā)出請求,經(jīng)過解析,將發(fā)送給瀏覽器的HTML、JS、CSS等文件解析出來,便成了百度內(nèi)容。爬蟲流程爬取

Python提供了requests等庫實現(xiàn)HTTP請求操作,獲取網(wǎng)頁的源代碼。

Requests

方法解釋requests.get()獲取html的主要方法requests.head()獲取html頭部信息的主要方法requests.post()向html網(wǎng)頁提交post請求的方法requests.put()向html網(wǎng)頁提交put請求的方法requests.patch()向html提交局部修改的請求requests.delete()向html提交刪除請求Requests

importrequestsr=requests.get(url='http://www……')#GET請求print(r.status_code)#獲取返回狀態(tài)print(r.url)print(r.text)#打印解碼后的返回數(shù)據(jù)解析從網(wǎng)頁源代碼中提取有用的信息。方法1:采用正則表達式提取,但是在構造正則表達式時比較復雜且容易出錯。方法2:由于網(wǎng)頁的結構有一定的規(guī)則,可以利用BeautifulSoup、pyquery、lxml等庫提取網(wǎng)頁節(jié)點屬性、CSS選擇器等網(wǎng)頁信息。

存儲將提取到的數(shù)據(jù)保存到某處以便后續(xù)處理和分析,可以保存為TXT文本或JSON文本,也可以保存到MySQL和MongoDB等數(shù)據(jù)庫。正則表達式

正則表達式,又稱正規(guī)表示法、常規(guī)表示法,是指通過事先定義好的特定字符(“元字符”)組成的“規(guī)則字符串”,對字符串進行過濾邏輯。凡是符合規(guī)則的字符串,認為“匹配”,否則,不“匹配”。

正則表達式

采用正則表達式判斷一個字符串是否包含合法的Email,需要創(chuàng)建一個匹配Email的正則表達式,然后通過該正則表達式去判斷。正則表達式元字符含義輸入輸出.匹配任意字符

a.cAbc^匹配開始位置^abcAbc$匹配結束位置abc$Abc*

匹配前一個元字符0到多次abc*ab;abccc+匹配前一個元字符1到多次abc+abc;abccc?匹配前一個元字符0到1次abc?ab;abcre模塊fIndall()compile()match()search()replace()split()Python中的re模塊提供了一個正則表達式引擎接口,允許將正則表達式編譯成模式對象,通過這些模式對象執(zhí)行模式匹配搜索和字符串分割、子串替換等操作。Findall()>>>importre>>>p=pile(r'\d+')>>>print(p.findall('o1n2m3k4'))['1','2','3','4']search()>>>importre>>>a="123abc456">>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))123abc456>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))123>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))abc>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))456Match()>>>importre>>>print(re.match('www','').span())#在起始位置匹配(0,3)>>>print(re.match('com',''))#不在起始位置匹配Nonesplit()1)只傳一個參數(shù),默認分割整個字符串>>>str="a,b,c,d,e";>>>str.split(',');["a","b","c","d","e"]split()2)傳入兩個參數(shù),返回限定長度的字符串>>>str="a,b,c,d,e";>>>str.split(',',3);["a","b","c"]

split()3)使用正則表達式匹配,返回分割的字符串>>>str="aa44bb55cc66dd";>>>print(re.split('\d+',str))["aa","bb","cc","dd"]BeautifulSouplxml作為BeautifulSoup庫解析器BeautifulSoup

BeautifulSoup將HTML文檔轉換成一個復雜的樹形結構,每個節(jié)點都是Python對象BeautifulSoupfromurllib.requestimporturlopenfrombs4importBeautifulSoup#導入BeautifulSoup對象html=urlopen('/new100.html')#打開url,獲取html內(nèi)容bs_obj=BeautifulSoup(html.read()

溫馨提示

  • 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

提交評論