WEB开发网
开发学院软件开发Python 可爱的 Python: 用基于生成器的状态机和协同程序增... 阅读

可爱的 Python: 用基于生成器的状态机和协同程序增加效率

 2007-03-29 12:05:22 来源:WEB开发网   
核心提示: 清单 1. statemachine_test.pyfrom statemachine import StateMachinedef ones_counter(val):print "ONES State:",while 1:if val <= 0 or val

清单 1. statemachine_test.py

from statemachine import StateMachine
def ones_counter(val):
  print "ONES State:  ",
  while 1:
    if val <= 0 or val >= 30:
      newState = "Out_of_Range" ; break
    elif 20 <= val < 30:
      newState = "TWENTIES";   break
    elif 10 <= val < 20:
      newState = "TENS";     break
    else:
      print " @ %2.1f+" % val,
    val = math_func(val)
  print " >>"
  return (newState, val)
# ... other handlers ...
def math_func(n):
  from math import sin
  return abs(sin(n))*31
if __name__== "__main__":
  m = StateMachine()
  m.add_state("ONES", ones_counter)
  m.add_state("TENS", tens_counter)
  m.add_state("TWENTIES", twenties_counter)
  m.add_state("OUT_OF_RANGE", None, end_state=1)
  m.set_start("ONES")
  m.run(1)

读者如果接下来对导入的 StateMachine 类以及它的方法如何工作感兴趣,应该看看前面的文章。

使用生成器

基于生成器的状态机的完整版本比我更愿意在本专栏中介绍的代码样本略长。不过,下面的代码样本是完整的应用程序,而且不需要导入单独的 statemachine 模块以提供支持。总的来说,这个版本比基于类的那个版本要短一些(我们将看到它有一些特别之处,而且还非常强大)。

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

Tags:可爱 Python 基于

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