Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由吉多·范羅蘇姆創(chuàng)造,第一版發(fā)布于1991年,可以視之為一種改良的LISP。Python的設(shè)計(jì)哲學(xué)強(qiáng)調(diào)代碼的可讀性和簡(jiǎn)潔的語(yǔ)法。相比于C++或Java,Python讓開(kāi)發(fā)者能夠用更少的代碼表達(dá)想法。
創(chuàng)新互聯(lián)公司是一家專(zhuān)注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),祁東網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:祁東等地區(qū)。祁東做網(wǎng)站價(jià)格咨詢(xún):18980820575Python的設(shè)計(jì)目標(biāo)之一是讓代碼具備高度的可閱讀性。它設(shè)計(jì)時(shí)盡量使用其它語(yǔ)言經(jīng)常使用的標(biāo)點(diǎn)符號(hào)和英文單字,讓代碼看起來(lái)整潔美觀(guān)。它不像其他的靜態(tài)語(yǔ)言如C、Pascal那樣需要重復(fù)書(shū)寫(xiě)聲明語(yǔ)句,也不像它們的語(yǔ)法那樣經(jīng)常有特殊情況和意外。
接下來(lái),和大家介紹下Python練手的實(shí)戰(zhàn)項(xiàng)目。
這是《Python基礎(chǔ)教程》后面的實(shí)踐,照著寫(xiě)寫(xiě),一方面是來(lái)熟悉Python的代碼方式,另一方面是練習(xí)使用Python中的基本的以及非基本的語(yǔ)法,做到熟能生巧。
這個(gè)項(xiàng)目一開(kāi)始比較簡(jiǎn)單,不過(guò)重構(gòu)之后就有些復(fù)雜了,但是更靈活了。
按照書(shū)上所說(shuō),重構(gòu)之后的程序,分為四個(gè)模塊:處理程序模塊,過(guò)濾器模塊,規(guī)則(其實(shí)應(yīng)該是處理規(guī)則),語(yǔ)法分析器。
先來(lái)說(shuō)處理程序模塊,這個(gè)模塊的作用有兩個(gè),一個(gè)是提供那些固定的html標(biāo)記的輸出(每一個(gè)標(biāo)記都有start和end),另一個(gè)是對(duì)這個(gè)標(biāo)記輸出的開(kāi)始和結(jié)束提供了一個(gè)友好的訪(fǎng)問(wèn)接口。來(lái)看下程序handlers.py:
這個(gè)程序堪稱(chēng)是整個(gè)“項(xiàng)目”的基石所在:提供了標(biāo)簽的輸出,以及字符串的替換。理解起來(lái)也比較簡(jiǎn)單。
再來(lái)看第二個(gè)模塊“過(guò)濾器”,這個(gè)模塊更為簡(jiǎn)單,其實(shí)就是一個(gè)正則表達(dá)式的字符串。相關(guān)代碼如下:
就是三個(gè)過(guò)濾器了,分別是:強(qiáng)調(diào)牌過(guò)濾器(用×號(hào)標(biāo)出的),url牌過(guò)濾器,email牌過(guò)濾器。熟悉正則表達(dá)式的同學(xué)理解起來(lái)是沒(méi)有壓力的。
再來(lái)看第三個(gè)模塊“規(guī)則”,這個(gè)模塊,拋開(kāi)那祖父類(lèi)不說(shuō),其他類(lèi)應(yīng)該有的兩個(gè)方法是condition和action,前者是用來(lái)判斷讀進(jìn)來(lái)的字符串是不是符合自家規(guī)則,后者是用來(lái)執(zhí)行操作的,所謂的執(zhí)行操作就是指調(diào)用“處理程序模塊”,輸出前標(biāo)簽、內(nèi)容、后標(biāo)簽。 來(lái)看下這個(gè)模塊的代碼,其實(shí)這個(gè)里面幾個(gè)類(lèi)的關(guān)系,畫(huà)到類(lèi)圖里面看會(huì)比較清晰。 rules.py:
補(bǔ)充utils.py:
如果你在學(xué)習(xí)Python的過(guò)程中遇見(jiàn)了很多疑問(wèn)和難題,可以加-q-u-n 227 -435-450里面有軟件視頻資料免費(fèi)
總結(jié)一下:
最后隆重的來(lái)看下“語(yǔ)法分析器模塊”,這個(gè)模塊的作用其實(shí)就是協(xié)調(diào)讀入的文本和其他模塊的關(guān)系。在往重點(diǎn)說(shuō)就是,提供了兩個(gè)存放“規(guī)則”和“過(guò)濾器”的列表,這么做的好處就是使得整個(gè)程序的靈活性得到了極大的提高,使得規(guī)則和過(guò)濾器變成的熱插拔的方式,當(dāng)然這個(gè)也歸功于前面在寫(xiě)規(guī)則和過(guò)濾器時(shí)每一種類(lèi)型的規(guī)則(過(guò)濾器)都單獨(dú)的寫(xiě)成了一個(gè)類(lèi),而不是用if..else來(lái)區(qū)分。 看代碼:
這個(gè)模塊里面的處理思路是,遍歷客戶(hù)端(也就是程序執(zhí)行的入口)給插進(jìn)去的所有的規(guī)則和過(guò)濾器,來(lái)處理讀進(jìn)來(lái)的文本。
有一個(gè)細(xì)節(jié)的地方也要說(shuō)一下,其實(shí)是和前面寫(xiě)的呼應(yīng)一下,就是在遍歷規(guī)則的時(shí)候通過(guò)調(diào)用condition這個(gè)東西來(lái)判斷是否符合當(dāng)前規(guī)則。
我覺(jué)得這個(gè)程序很像是命令行模式,有空可以復(fù)習(xí)一下該模式,以保持記憶網(wǎng)節(jié)點(diǎn)的牢固性。
最后說(shuō)一下我以為的這個(gè)程序的用途:
1、用來(lái)做代碼高亮分析,如果改寫(xiě)成js版的話(huà),可以做一個(gè)在線(xiàn)代碼編輯器。
2、可以用來(lái)學(xué)習(xí),供我寫(xiě)博文用。
還有其他的思路,可以留下您的真知灼見(jiàn)。
補(bǔ)充一個(gè)類(lèi)圖,很簡(jiǎn)陋,但是應(yīng)該能說(shuō)明之間的關(guān)系。另外我還是建議如果看代碼捋不清關(guān)系最好自己畫(huà)圖,自己畫(huà)圖才能熟悉整個(gè)結(jié)構(gòu)。
** Python項(xiàng)目練習(xí)二:畫(huà)幅好畫(huà)**
這是《Python基礎(chǔ)教程》中的第二個(gè)項(xiàng)目,關(guān)于Python操作PDF,涉及到的知識(shí)點(diǎn):
1、urllib的使用
2、reportlab庫(kù)的使用
這個(gè)例子著實(shí)很簡(jiǎn)單,不過(guò)我發(fā)現(xiàn)在Python里面可以直接在數(shù)組[]里面寫(xiě)for循環(huán),真是越用越方便。
下面是代碼:
Python項(xiàng)目練習(xí)三:萬(wàn)能的XML
這個(gè)項(xiàng)目的名稱(chēng)與其叫做萬(wàn)能的XML不如叫做自動(dòng)構(gòu)建網(wǎng)站,根據(jù)一份XML文件,生成對(duì)應(yīng)目錄結(jié)構(gòu)的網(wǎng)站,不過(guò)只有html還是太過(guò)于簡(jiǎn)單了,如果要是可以連帶生成css那就比較強(qiáng)大了。這個(gè)有待后續(xù)研發(fā),先來(lái)研究下怎么html網(wǎng)站結(jié)構(gòu)。 既然是通過(guò)XML結(jié)構(gòu)生成網(wǎng)站,那所有的事情都應(yīng)該由這個(gè)XML文件來(lái)。先來(lái)看下這個(gè)XML文件,website.xml:
有了這個(gè)文件,下面應(yīng)該來(lái)看怎么通過(guò)這個(gè)文件生成網(wǎng)站。
首先我們要解析這個(gè)xml文件,Python解析xml和在Java中一樣,有兩種方式,SAX和DOM,兩種處理方式不同點(diǎn)在于速度和范圍,前者講究的是效率,每次只處理文檔的一小部分,快速而能有效的利用內(nèi)存,后者是相反的處理方式,先把所有的文檔載入到內(nèi)存,然后再進(jìn)行處理,速度比較慢,也比較消耗內(nèi)存,唯一的好處就是可以操作整個(gè)文檔。
在Python中使用sax方式處理xml要先引入xml.sax中的parse函數(shù),還有xml.sax.handler中的ContentHandler,后面的這個(gè)類(lèi)是要和parse函數(shù)來(lái)配合使用的。使用方式如下: parse('xxx.xml',xxxHandler),這里面的xxxHandler要繼承上面的ContentHandler,不過(guò)只要繼承就行,不需要有所作為。 然后這個(gè)parse函數(shù)在處理xml文件的時(shí)候,會(huì)調(diào)用xxxHandler中的startElement函數(shù)和endElement函數(shù)來(lái)一個(gè)xml中的標(biāo)簽的開(kāi)始和結(jié)束,中間的過(guò)程使用一個(gè)名為characters的函數(shù)來(lái)處理標(biāo)簽內(nèi)部的所有字符串。
有了上面的這些認(rèn)識(shí),我們已經(jīng)知道如何處理xml文件了,然后再來(lái)看那個(gè)罪惡的源頭website.xml文件,分析其結(jié)構(gòu),只有兩個(gè)節(jié)點(diǎn):page和directory,很明顯page表示一個(gè)頁(yè)面,directory表示一個(gè)目錄。
所以處理這個(gè)xml文件的思路就變的清晰了。讀取xml文件的每一個(gè)節(jié)點(diǎn),然后判斷是page還是directory如果是page則創(chuàng)建html頁(yè)面,然后把節(jié)點(diǎn)中的內(nèi)容寫(xiě)到文件里。如果遇到directory就創(chuàng)建一個(gè)文件夾,然后再處理其內(nèi)部的page節(jié)點(diǎn)(如果存在的話(huà))。
下面來(lái)看這部分代碼,書(shū)中的實(shí)現(xiàn)比較復(fù)雜,比較靈活。先來(lái)看,然后在分析。
看起來(lái)這個(gè)程序上面分析的復(fù)雜了一些,不過(guò)偉人毛毛說(shuō)過(guò),任何復(fù)雜的程序都是紙老虎。那我們?cè)賮?lái)分析一下這個(gè)程序。
首先看到這個(gè)程序是有兩個(gè)類(lèi),其實(shí)完全可以當(dāng)作一個(gè)類(lèi),因?yàn)橛辛死^承。
然后再來(lái)看它多了些什么,除了我們分析出來(lái)的startElement和endElement以及characters,多出來(lái)了startPage,endPage;startDirectory,endDirectory;defaultStart,defaultEnd;ensureDirectory;writeHeader,writeFooter;和dispatch,這些個(gè)函數(shù)。除了dispatch,前面的函數(shù)都很好理解,每一對(duì)函數(shù)都是單純的處理對(duì)應(yīng)的html標(biāo)簽以及xml節(jié)點(diǎn)。而dispatch比較復(fù)雜,復(fù)雜之處在于他是用來(lái)動(dòng)態(tài)拼合函數(shù)并且進(jìn)行執(zhí)行的。
dispatch的處理思路是,首先根據(jù)傳遞的參數(shù)(就是操作名稱(chēng)以及節(jié)點(diǎn)名稱(chēng))判斷是否存在對(duì)應(yīng)的函數(shù)如startPage,如果不存在則執(zhí)行default+操作名稱(chēng):如defaultStart。
一個(gè)函數(shù)一個(gè)函數(shù)搞清楚之后,就知道整個(gè)處理流程是什么樣了。首先創(chuàng)建一個(gè)public_html的文件,存放整個(gè)網(wǎng)站,然后讀xml的節(jié)點(diǎn),通過(guò)startElement和endElement調(diào)用dispatch進(jìn)行處理。然后就是dispatch怎么調(diào)用具體的處理函數(shù)了。 到此為止,這個(gè)項(xiàng)目算是分析完了。
主要掌握的內(nèi)容一個(gè)是python中使用SAX處理XML,另一個(gè)就是python中的函數(shù)的使用,比如getattr,傳參數(shù)時(shí)的星號(hào)
python項(xiàng)目練習(xí)四:新聞聚合
書(shū)中的第四個(gè)練習(xí),新聞聚合。現(xiàn)在很少見(jiàn)的一類(lèi)應(yīng)用,至少我從來(lái)沒(méi)有用過(guò),又叫做Usenet。這個(gè)程序的主要功能是用來(lái)從指定的來(lái)源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個(gè)程序的用處有些類(lèi)似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。
先上代碼,然后再來(lái)逐一分析:
這個(gè)程序,首先從整體上進(jìn)行分析,重點(diǎn)部分在于NewsAgent,它的作用是存儲(chǔ)新聞來(lái)源,存儲(chǔ)目標(biāo)地址,然后在分別調(diào)用來(lái)源服務(wù)器(NNTPSource以及SimpleWebSource)以及寫(xiě)新聞的類(lèi)(PlainDestination和HTMLDestination)。所以從這里也看的出,NNTPSource是專(zhuān)門(mén)用來(lái)獲取新聞服務(wù)器上的信息的,SimpleWebSource是獲取一個(gè)url上的數(shù)據(jù)的。而PlainDestination和HTMLDestination的作用很明顯,前者是用來(lái)輸出獲取到的內(nèi)容到終端的,后者是寫(xiě)數(shù)據(jù)到html文件中的。
有了這些分析,然后在來(lái)看主程序中的內(nèi)容,主程序就是來(lái)給NewsAgent添加信息源和輸出目的地址的。
這確實(shí)是個(gè)簡(jiǎn)單的程序,不過(guò)這個(gè)程序可是用到了分層了
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站標(biāo)題:Python的練習(xí)項(xiàng)目-創(chuàng)新互聯(lián)
分享URL:http://vcdvsql.cn/article14/jjdde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站排名、標(biāo)簽優(yōu)化、虛擬主機(jī)、用戶(hù)體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容