-
总步骤:
1.util.py:文本块生成器,把纯文本分成一个一个的文本块;
2.handlers.py:为文本块打上合适的 HTML 标记;
3.rules.py:设计规则来判断每个文本块交给处理程序将要加什么标记;
4.markup.py:对整个文本进行解析的程序。
一、文本块生成器
- 函数.strip()可以去除一个字符串前后的空格以及换行符
>>> s=' This is me \n'
>>> s=s.strip()
>>> s
'This is me'
如果在strip()函数添加不同的参数,如strip("me"),则可以去除字符串前后的"me"字符,同时去除字符串前后空格以及换行符的功能失效。
>>> s=' This is me'
>>> s=s.strip('me')
>>> s
' This is '
-
yield,类似于return,一个内部含有yield的函数,当调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象。当使用for进行迭代的时候,第一次迭代中函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值; 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。
如果生成器内部没有定义 yield 关键字,那么这个生成器被认为成空的。这种情况可能因为是循环进行没了,或者是没有满足 if/else 条件。(yield的解释:http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html#id6) -
定义lines(file),使用循环将这个file中的line都用换行符隔开,并生成一个生成器。
-
定义blocks(file),将上面lines(file)中的line中不为空的加入到block的list中,为空的则将上面的block以新的方式连接起来,再返回一个新的空的block。
- .join将序列中的元素以指定的字符连接生成一个新的字符串。
>>> str = "-"
>>> seq = ("a", "b", "c") # 字符串序列
>>>print str.join( seq )
a-b-c
二、处理程序
-
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。创建类:使用class语句来创建一个新类,class之后为类的名称并以冒号结尾。
>>> class ClassName:
-
callable()函数用来检查一个函数是否能够被调用。如果能够被调用返回True,否则False。
-
getattr(object, name,[default]) , 获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,可以在后面添加一对括号。函数则是返回一个对象的属性值。举例来说,getattr(x, 'foo', None) 就相当于是 x.foo,而如果没有这个属性值foo,则返回我们设定的默认值None。
>>> class test():
... name="abc"
... def run(self):
... return "HelloWord"
...
>>> t=test()
>>> getattr(t, "name") #获取name属性,存在就打印出来。
'abc'
>>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。
<bound method test.run of <__main__.test instance at 0x0269C878>>
>>> getattr(t, "run")() #获取run方法,后面加括号可以将这个方法运行。
'HelloWord'
>>> getattr(t, "age") #获取一个不存在的属性。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: test instance has no attribute 'age'
>>> getattr(t, "age","18") #若属性不存在,返回一个默认值。
'18'
(尚有不足,需要再掌握更高水平的知识)
#######三、规则
#######四、解析
(深入学习后,再读代码)
网友评论