可爱的 Python:使用状态机
2007-03-29 12:01:01 来源:WEB开发网核心提示: 本文中讨论的状态机是高级机器,其目的是演示一类问题的编程解决方案,可爱的 Python:使用状态机(2),如果有必要按响应事件行为的类别来讨论编程问题,那么您的解决方案很可能是显式状态机,则状态机也许不是正确的解决方法,(在这种情况下,文本处理状态机最可能调用显式状态机的一个编程问题涉及到
本文中讨论的状态机是高级机器,其目的是演示一类问题的编程解决方案。如果有必要按响应事件行为的类别来讨论编程问题,那么您的解决方案很可能是显式状态机。
文本处理状态机
最可能调用显式状态机的一个编程问题涉及到处理文本文件。处理文本文件通常包括读取信息单元(通常叫做字符或行),然后对刚读取的单元执行适当操作。某些情况下,这个处理是“无状态的”(即每个这样的单元都包含了足够的信息,可以正确确定要执行什么操作)。在其它情况下,即使文本文件不是完全无状态,数据也只有有限的上下文(例如,操作取决于不比行号更多的信息)。但是,在其它常见文本处理问题中,输入文件是极具“状态”的。每一块数据的含义取决于它前面的字符串(也许是它后面的字符串)。报告、大型机数据输入、可读文本、编程源文件和其它种类的文本文件都是有状态的。一个简单例子是可能出现在 Python 源文件中的一行代码:
myObject = SomeClass(this, that, other)
这行表示,如果恰好有以下几行围绕着这一行,则有部分内容不同:
"""How to use SomeClass:
myObject = SomeClass(this, that, other)
"""
我们应知道我们处于“块引用” 状态 以确定这行代码是一部分注释而不是 Python 操作。
何时不使用状态机
当开始为任何有状态的文本文件编写处理器的任务时,问一问自己,您希望在文件中找到什么类型的输入项。每种类型的输入项都是一种状态的候选项。这些类型共有几种。如果数字很大或者不确定,则状态机也许不是正确的解决方法。(在这种情况下,某些数据库解决方案可能更适合。)
更多精彩
赞助商链接