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

可爱的 Python:使用状态机

 2007-03-29 12:01:01 来源:WEB开发网   
核心提示: 可以用 Txt2Html 下载从中取出该代码的源文件(请参阅 参考资料 ),请注意:变量 state 声明为 global ,可爱的 Python:使用状态机(6),在函数(如 startText() )中更改它的值,转移条件,以下类及其关联处理程序在隔离状态中操作方面完成得很好,许多情况

可以用 Txt2Html 下载从中取出该代码的源文件(请参阅 参考资料 )。请注意:变量 state 声明为 global ,在函数(如 startText() )中更改它的值。转移条件,如 textln.match() ,是规则表达式模式,但它们可能也是定制函数。实际上,以后会在程序中执行格式化。状态机只将文本文件分析成 blocks 列表中带标签的块。

抽象状态机类

在表单和函数中使用 Python 实现抽象状态机很容易。这使程序的状态机模型比前一个例子中的简单条件块显得更突出(初看,其中的条件与其它条件没有什么不同)。而且,以下类及其关联处理程序在隔离状态中操作方面完成得很好。许多情况下,这改善了封装和可读性。

文件:statemachine.py          
     from
     string
          
     import
     upper
          
     class 
          
          
     StateMachine
    :
          
     def
          
          
     __init__
    (self):
self.handlers = {}
self.startState = None
self.endStates = []
          
     def 
          
          
     add_state
    (self, name, handler, end_state=0):
name = upper(name)
self.handlers[name] = handler
          
     if
     end_state:
self.endStates.append(name)
          
     def 
          
          
     set_start
    (self, name):
self.startState = upper(name)
          
     def 
          
          
     run
    (self, cargo):
          
     try
    :
handler = self.handlers[self.startState]
          
     except
    :
          
     raise
    
    "InitializationError",
    "must call .set_start() before .run()"
    
      if
    
    
     not
     self.endStates:
          
     raise
    
    "InitializationError",
    "at least one state must be an end_state"
    
      while
     1:
(newState, cargo) = handler(cargo)
          
     if
     upper(newState)
          
     in
     self.endStates:
          
     break
    
    
      else
    :
handler = self.handlers[upper(newState)]

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

Tags:可爱 Python 使用

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