- 4
- 0
- 约2.3万字
- 约 30页
- 2020-11-07 发布于江苏
- 举报
python项目练习一:即时标识 60837°C
这是《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(*args)
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, match)
if result is None: match.group(0)
return result
return substitution
class HTMLRenderer(Handler):
def start_document(self):
print htmlheadtitle.../title/headbody
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 sub_mail(self, match):
return a href=mailto:%s%s/a % (match.group(1),match.group(1))
def feed(self, data):
print data
这个程序堪称是整个“项目”基石所在:提供了标签输出,和字符串替换。了解起来也比较简单。
再来看第二个模块“过滤器”,这个模块更为简单,其实就是一个正则表示式字符串。相关代码以下:
self.addFilter(r\*(.+?)\*, emphasis)
self.addFilter(r(http://[\.a-z0-9A-Z/]+), url)
self.addFilter(r([\.a-zA-Z]+@[\.a-zA-Z]+[a-zA-Z]+),mail)
这就是三个过滤器了,分别是:强调牌过滤器(用×号标出),url牌过滤器,email牌过滤器
原创力文档

文档评论(0)