最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目。因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习python的我帮助有限。
下面是自己学习过程整理的一些内容。
基础版:
基础教程上面的项目例子,都会先出一个基础的代码版本,然后根据第一个版本,进行相应的补充完善。我们先来看一下util.py这个文件。
1 #encoding:utf-8
2 #生成器,for循环时会依次返回每一行,它只在文件的最后追加了一个空行\n
3 def lines(file):
4 for line in file:yield line
5 yield '\n'
6 #生成器,for循环时会依次返回文本块组成的函数
7 def blocks(file):
8 block = []
9 for line in lines(file):
10 if line.strip():
11 block.append(line)
12 elif block:
13 yield ''.join(block).strip()
14 block = []
这里的两个主要内容是生成器和for...in语法。
首先我们来看lines()方法,参数是文件,然后对文件进行循环,每次读取一行文件,主意这离的yield关键字,这里代表方法是一个生成器,循环的时候到yield我们可以理解成返回一次line内容。文本读完后,yield处是一个'\n'。
blocks()方法就使用了上面的生成器,每次循环取出内容后,对line内容进行判断,如果有值,去除两边空格,添加到列表中,否则将block列表生成字符串。我们可以看出blocks也是一个生成器,他的实际功能是,从文件中,依次读取出来一个文本块。
然后是simple_markup.py文件。
1 import sys,re
2 from util import *
3
4 print '<html><head><title>hello</title></head><body>'
5
6 title = True
7 for block in blocks(sys.stdin):
8 block = re.sub(r'\*(.+?)\*',r'<em>\1</em>',block)
9 if title:
10 print '<h1>'
11 print block
12 print '</h1>'
13 title = False
14 else:
15 print '<p>'
16 print block
17 print '</p>'
18 print '</body></html>'
这里我们需要注意一下,re.sub(r'\*(.+?)\*',r'<em>\1</em>',block),他是re模块的应用,首先增则匹配到内容,然后替换式替换。 其他部分,就是判断title是否为True,若是则给h1标签,否则给p标签。 扩展版: 在上面的文件中,功能