python项目练习一:即时标记

倪平宇 发表于 2020/04/22 10:27:57 2020/04/22
【摘要】 Python的实践,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。

Python的实践,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。

image.png

这个项目一开始比较简单,不过重构之后就有些复杂了,但是更灵活了。


按照书上所说,重构之后的程序,分为四个模块:处理程序模块,过滤器模块,规则(其实应该是处理规则),语法分析器。


先来说处理程序模块,这个模块的作用有两个,一个是提供那些固定的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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。