WEB开发网
开发学院软件开发Python 可爱的 Python:使用状态机 阅读

可爱的 Python:使用状态机

 2007-03-29 12:01:01 来源:WEB开发网   
核心提示: 还请考虑您是否需要使用状态机,许多情况下,可爱的 Python:使用状态机(3),最好从更简单的方法入手,也许会发现即使文本文件是有状态的,但这好象不是处理此问题的 正确 方法,例如,也有一种简单的方法可以分块读取它(其中每一块是一种类型的输入值),实际上

还请考虑您是否需要使用状态机。许多情况下,最好从更简单的方法入手。也许会发现即使文本文件是有状态的,也有一种简单的方法可以分块读取它(其中每一块是一种类型的输入值)。实际上,在单一状态块中,仅当文本类型之间的转移需要基于内容的计算时,才有必要实现状态机。

下面这个简单的例子说明了需要使用状态机的情况。请考虑用于将一列数字划分成几块的两个规则。在第一个规则中,列表中的零表示块之间的间断。第二个规则中,当一个块中的元素总和超过 100 时,会发生块之间的间断。由于它使用累加器变量来确定是否达到了阈值,您不能“马上”看到子列表的边界。因此,第二个规则也许更适合于类似于状态机的机制。

稍微有些状态、但由 不 太适合用状态机处理的文本文件的例子是 Windows 风格的 .ini 文件。这种文件包括节头、注释和许多赋值。例如:

; set the colorscheme and userlevel
[colorscheme]
background=red
foreground=blue
title=green
[userlevel]
login=2
title=1

我们的例子没有实际含义,但它表明了 .ini 格式一些有趣的特性。

就某种意义而言,每一行的类型由它的第一个字符确定(可能是分号、左花括号或字母)。

从另一种角度看,这种格式是“有状态的”,因为关键字 "title" 大概表示如果它出现在每一节中,那么就有独立的内容。

您可以编写一个有 COLORSCHEME 状态和 USERLEVEL 状态的文本处理器程序,这个程序仍处理每个状态的赋值。但这好象不是处理此问题的 正确 方法。例如,可以使用 Python 代码在这个文本文件中只创建自然块,如:

处理 .INI 文件的分块 Python 代码          
     import
     string
txt = open(
    'hypothetical.ini').read()
sects = string.split(txt,
    '[')
          
     for
     sect
          
     in
     sects:
    # do something with sect, like get its name
 # (the stuff up to ']') and read its assignments

上一页  1 2 3 4 5 6 7  下一页

Tags:可爱 Python 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接