# Python 有限状态机

> 原文： [https://pythonspot.com/python-finite-state-machine/](https://pythonspot.com/python-finite-state-machine/)

## 简介

**有限状态机（FSM）**是具有状态，转换，输入和输出的数学计算模型。 这台机器当时始终处于一种状态，并且可以通过转换转移到其他状态。 转换会将计算机的状态更改为另一个状态。

可以使用有限状态机对大量问题进行建模。 自动贩卖机，电梯和交通信号灯是现代生活中使用的状态机的简单示例。 高级用法是人工智能，语言解析和通信协议设计。

## 有限状态机示例

首先安装 Fysom 模块：

```py
sudo pip install fysom
```

我们可以用两个状态定义一个有限状态机（FSM）：睡眠状态和唤醒状态。 要在状态之间移动，我们将定义转换`wakeup()`和`sleep()`。

![finite state machine](img/4feca70727af7a6746c9d69566f08f53.jpg)

有限状态机。状态：醒着，睡觉。转换：睡眠，醒来

例：

```py
from fysom import *

fsm = Fysom({'initial': 'awake',
             'final': 'red',
             'events': [
                 {'name': 'wakeup', 'src': 'sleeping', 'dst': 'awake'},
                 {'name': 'sleep',  'src': 'awake',   'dst': 'sleeping'}]})

print(fsm.current)   # awake
fsm.sleep()
print(fsm.current)   # sleeping
fsm.wakeup()
print(fsm.current)   # awake

```

结果：

```py

awake
sleeping
awake

```

## 有限状态机

Python 中有几种有限状态机的实现：

*   [Fysom](https://github.com/oxplot/fysom)
*   [PythonBits fsm](https://github.com/smontanaro/python-bits/blob/master/fsm.py)
*   [Fsme](http://fsme.sourceforge.net/)