可爱的 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 模块以提供支持。总的来说,这个版本比基于类的那个版本要短一些(我们将看到它有一些特别之处,而且还非常强大)。
更多精彩
赞助商链接