PythonFSM

simple-fsm的Python项目详细描述


有限状态机

一个简单的“pythonic”FSM实现。用状态转换来装饰你的行为。 使用状态转换表创建一个FSM实例。将事件推送到事件队列中。 使用next生成器处理状态机。在

状态转换表

用状态转换来装饰你的行为。假设你有一个简单的两态 计算机和一个可以在两个状态之间切换的事件。在

import fsm

table = fsm.Table()

@table('STATE1', 'doit', 'STATE2')
def action1(*args, **kwargs):
    pass

@table('STATE2', 'doit', 'STATE1')
def action2(*args, **kwargs):
    pass

print(table.dump())

输出

^{pr2}$

FSM实例

使用状态转换表和初始状态定义一个FSM实例。 要执行状态机,您可以push事件到事件队列并通过 next方法。在

myfsm = fsm.FSM(table, 'STATE1')

myfsm.push('doit')
myfsm.push('doit')

for _ in myfsm.next():
    print(myfsm.state)

输出

STATE2
STATE1

由于next是一个生成器,因此需要通过生成器语法进行处理。做它 这种方式允许事件在任何时候被推送到FSM中。在

行动

为每个状态转换调用操作fn。有时你会想传递注释 通过FSM的数据。next方法使用*args, **kwargs提供该方法。你可以 推送包含自定义**kwargs数据的事件,该数据将合并到操作调用中 **kwargs。最后,调用的每个操作都将有一个transition_FSM作为kwargs传入 也。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java游戏!框架伪造应用程序它实际上做什么?   java如何在JavaFx中显示表视图中的即时更改?   对象类的equals()方法的java重载   xpages介绍如何部署java。IBM Notes中的策略更改   java如何访问侦听器中的另一个视图?   java getDefaultDisplay()的替代方法是什么   java opencv匹配模板   java Android Firebase写入数据时的常量超时   在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。   带有GUI的swing Java模拟无法运行模拟   java NoSuchElementException在特定的Web端上使用无头铬和硒   java对文件进行迭代,即使文件在目录中也会出现“未找到文件”异常。你能告诉我为什么吗?谢谢   递归Java 8,匿名递归嵌套方法   java为什么我看到枚举常量的字段值会被序列化/反序列化?在哪种情况下,枚举中哪些内容没有序列化?   java在运行sonar scanner和Spotbugs规则时出错,用于单片项目?   java如何检查硬件键盘是否可用?(黑莓)   tile游戏动作侦听器循环中的java错误   sockets Java线程池与高请求场景中的新线程   java如何使用Hibernate注释在联接表上创建索引?