Web 状态机一招鲜, 第一部、Python 状态机入门

2009-05-13 06:37:26来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1. 入门
因为有人抱怨我在 PyQt4 的时候太跳跃了, 所以这次我们先来欲盖弥彰地补充一点基础。
在此之前, 请先阅读 Python2.5 手册 "What's New In Python2.5" 部分。请翻到第 7 章 "7 PEP 342: New Generator Features"。
Generator, 俗称 "生成器", Python 解释器支持的基本语法之一。那么生成器怎么玩呢? 请回想一下, 你是否还记得 range 和 xrange? 他们之间有什么区别? 如果你搞清楚了, 我们就可以开始了。
为了解释生成器的运作, 让我们先来看一下这段代码。
>>> def my_xrange(n):
...     i = 0
...     while i >> for i in my_xrange(10):
...     print i,
...
0 1 2 3 4 5 6 7 8 9
看仔细了, my_xrange(n) 函数是用 yield 来返回结果的, 不是 return 哦。yield 的作用是 "生成" 一个返回值, 将函数暂停在这一步, 在下次调用时, 函数将接着执行, 直到下一个 yield 暂停。
下面, 我们来分解一下 for i in my_xrange(10) 这个语句。
>>> l = my_xrange(3)
>>> l.next()
0
>>> l.next()
1
>>> l.next()
2
>>> l.next()
Traceback (most recent call last):
  File "", line 1, in
StopIteration
我们可以使用 next() 来单步调用。直到函数结束, 抛出 StopIteration。这时候 for in 循环就结束了。够简单吧。
好了, 到这里为止我们应该已经基本知道生成器的概念和基本用法了。你可以在这两篇文章中得到进修的机会 (可爱的 Python)。
http://www.ibm.com/developerworks/cn/linux/sdk/python/charm-20/index.html
http://www.ibm.com/developerworks/cn/linux/sdk/python/charm-25/index.html
这里我建议各位将上面的内容消化一下, 动手实践一下。然后好好休息一下, 下面我将深入讲解了。
2. 开始头大 (文本处理)
接下来我们看到有这么一个文本文件:
##
# example.txt 請解析本文件
%filegroup-begin:group1%
%file-begin:file 1%
$title:test1
this is file 1 in group 1
%file-end%
%file-begin:file 2%
$title:test2
$author:william
this is file 2 in group 1
%file-end%
%filegroup-begin:group2%
# - EOF -
很明显, 这个文本文件中保存了一系列的 "group", 每个 "group" 中有若干个 "file", "file" 又有其属性。
现在让我们试着来解析这个文本文件, 我们该如何入手?
…… 好了, 时间到。现在我告诉你答案, 这对生成器来讲再容易不过了。请看使用了生成器方案的文本分析程序:
##
# file: parser.py
# 被解析文件: buff
buff = """
%filegroup-begin:group1%
%file-begin:file1%
$title:test1
this is file 1 in group 1
%file-end%
%file-begin:file2%
$title:test2
$author:william
this is file 2 in group 1
%file-end%
%filegroup-begin:group2%
%file-begin:file1%
$title:test1
this is file 1 in group 2
%file-end%
%file-begin:file22%
$title:test2
$author:william
this is file 2 in group 2
%file-end%
%filegroup-end%
"""
##
# 分段解析示範程序

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD5.0内核---锁机制

下一篇:Running Linux binaries on Openbsd