freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

python項(xiàng)目實(shí)踐(已修改)

2025-08-04 02:29 本頁面
 

【正文】 python項(xiàng)目練習(xí)一:即時(shí)標(biāo)記 60837176。C 這是《python基礎(chǔ)教程》后面的實(shí)踐,照著寫寫,一方面是來熟悉python的代碼方式,另一方面是練習(xí)使用python中的基本的以及非基本的語法,做到熟能生巧。這個(gè)項(xiàng)目一開始比較簡單,不過重構(gòu)之后就有些復(fù)雜了,但是更靈活了。按照書上所說,重構(gòu)之后的程序,分為四個(gè)模塊:處理程序模塊,過濾器模塊,規(guī)則(其實(shí)應(yīng)該是處理規(guī)則),語法分析器。先來說處理程序模塊,這個(gè)模塊的作用有兩個(gè),一個(gè)是提供那些固定的html標(biāo)記的輸出(每一個(gè)標(biāo)記都有start和end),另一個(gè)是對(duì)這個(gè)標(biāo)記輸出的開始和結(jié)束提供了一個(gè)友好的訪問接口。:class Handler: 39。39。39。 39。39。39。 def callback(self, prefix, name, *args): method = getattr(self,prefix+name,None) if callable(method): return method(*args) def start(self, name): (39。start_39。, name) def end(self, name): (39。end_39。, name) def sub(self, name): def substitution(match): result = (39。sub_39。, name, match) if result is None: (0) return result return substitutionclass HTMLRenderer(Handler): 39。39。39。 39。39。39。 def start_document(self): print 39。htmlheadtitle.../title/headbody39。 def end_document(self): print 39。/body/html39。 def start_paragraph(self): print 39。p39。 def end_paragraph(self): print 39。/p39。 def start_heading(self): print 39。h239。 def end_heading(self): print 39。/h239。 def start_list(self): print 39。ul39。 def end_list(self): print 39。/ul39。 def start_listitem(self): print 39。li39。 def end_listitem(self): print 39。/li39。 def start_title(self): print 39。h139。 def end_title(self): print 39。/h139。 def sub_emphasis(self, match): return 39。em%s/em39。 % (1) def sub_url(self, match): return 39。a href=%s%s/a39。 % ((1),(1)) def sub_mail(self, match): return 39。a href=mailto:%s%s/a39。 % ((1),(1)) def feed(self, data): print data這個(gè)程序堪稱是整個(gè)“項(xiàng)目”的基石所在:提供了標(biāo)簽的輸出,以及字符串的替換。理解起來也比較簡單。再來看第二個(gè)模塊“過濾器”,這個(gè)模塊更為簡單,其實(shí)就是一個(gè)正則表達(dá)式的字符串。相關(guān)代碼如下:(r39。\*(.+?)\*39。, 39。emphasis39。)(r39。(://[\.az09AZ/]+)39。, 39。url39。)(r39。([\.azAZ]+@[\.azAZ]+[azAZ]+)39。,39。mail39。)這就是三個(gè)過濾器了,分別是:強(qiáng)調(diào)牌過濾器(用號(hào)標(biāo)出的),url牌過濾器,牌過濾器。熟悉正則表達(dá)式的同學(xué)理解起來是沒有壓力的。再來看第三個(gè)模塊“規(guī)則”,這個(gè)模塊,拋開那祖父類不說,其他類應(yīng)該有的兩個(gè)方法是condition和action,前者是用來判斷讀進(jìn)來的字符串是不是符合自家規(guī)則,后者是用來執(zhí)行操作的,所謂的執(zhí)行操作就是指調(diào)用“處理程序模塊”,輸出前標(biāo)簽、內(nèi)容、后標(biāo)簽。 來看下這個(gè)模塊的代碼,其實(shí)這個(gè)里面幾個(gè)類的關(guān)系,畫到類圖里面看會(huì)比較清晰。 :class Rule: def action(self, block, handler): () (block) () return Trueclass HeadingRule(Rule): type = 39。heading39。 def condition(self, block): return not 39。\n39。 in block and len(block) = 70 and not block[1] == 39。:39。class TitleRule(HeadingRule): type = 39。title39。 first = True def condition(self, block): if not : return False = False return (self, block)class ListItemRule(Rule): type = 39。listitem39。 def condition(self, block): return block[0] == 39。39。 def action(self,block,handler): () (block[1:].strip()) () return Trueclass ListRule(ListItemRule): type = 39。list39。 inside = False def condition(self, block): return True def action(self,block, handler): if not and (self,block): () = True elif and not (self,block): () = False return Falseclass ParagraphRule(Rule): type = 39。paragraph39。 def condition(self, block): return True:def line(file): for line in file:yield line yield 39。\n39。def blocks(file): block = [] for line in lines(file): if (): (line) elif block: yield 39。39。.join(block).strip() block = []最后隆重的來看下“語法分析器模塊”,這個(gè)模塊的作用其實(shí)就是協(xié)調(diào)讀入的文本和其他模塊的關(guān)系。在往重點(diǎn)說就是,提供了兩個(gè)存放“規(guī)則”和“過濾器”的列表,這么做的好處就是使得整個(gè)程序的靈活性得到了極大的提高,使得規(guī)則和過濾器變成的熱插拔的方式,當(dāng)然這個(gè)也歸功于前面在寫規(guī)則和過濾器時(shí)每一種類型的規(guī)則(過濾器)都單獨(dú)的寫成了一個(gè)類,而不是用if..else來區(qū)分。 看代碼:import sys, refrom handlers import *from util import *from rules import *class Parser: def __init__(self,handler): = handler = [] = [] def addRule(self, rule): (rul
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1