python项目练习一:即时标记
【摘要】 Python的实践,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。
Python的实践,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。
这个项目一开始比较简单,不过重构之后就有些复杂了,但是更灵活了。
按照书上所说,重构之后的程序,分为四个模块:处理程序模块,过滤器模块,规则(其实应该是处理规则),语法分析器。
先来说处理程序模块,这个模块的作用有两个,一个是提供那些固定的html标记的输出(每一个标记都有start和end),另一个是对这个标记输出的开始和结束提供了一个友好的访问接口。来看下程序handlers.py:
class Handler: ''' '' def callback(self,prefix,name,*args):method * getattr(self,prefix+name,None) if callable(method):return method(*agrs) def start(self,name):self.callback('start_',name) def end(self,name): self.callback('end_',name) def sub(self,name): def substitution(match):result=self.callback('sub_’,name,math) f result is None:match.grouo(Θ) returnresultreturnsubstitutionclass HTMLRenderer(Handler) '''''' def start_document(self): print '<html><head><title>...</title></head><body>’ def end_document(self): print '</body></html>' def start_paragraph(self): print '<p>' def end_paragraph(self): print '</p>' def start_heading(self): print '<h2>' def end_heading(self): print '</h2>' def start_list(self): print '<ul>' def end_list(self): print '</ul>' def start_listitem(self): print '<li>' def end_listitem(self): print '</li>' def start_title(self): print '<h1>' def end_title(self): print '</h1>' def sub_emphasis(self,match): return'<em>%s</em>' & match.group(1) def sub_url(self,match): return'<a href="%s">%s</a>' % (match.group(1),match,group(1)) def feed(self.data): printdata
这个程序堪称是整个“项目”的基石所在:提供了标签的输出,以及字符串的替换。理解起来也比较简单。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)