Verstehen Sie Zustandsmaschinen in Python und wie Sie sie implementieren

王林
Freigeben: 2024-01-22 12:45:11
nach vorne
1061 Leute haben es durchsucht

Verstehen Sie Zustandsmaschinen in Python und wie Sie sie implementieren

状态机是一种行为模型,它定义对象如何响应事件。在Python中,状态机通常实现为有限状态机(FSM)。FSM是一种数学计算模型,可用于设计数字逻辑电路和计算机程序。它由一组状态,及状态之间的转换以及发生转换时执行的操作组成。

有限状态机(FSM)可以表示为有向图,状态表示为节点,转换表示为边。边缘标有触发转换的事件,并且动作与边缘相关联。

状态机的动态属性

当我们创建状态机时,模块会为该机器中存在的每个状态创建一组特殊的属性。我们可以使用实例和属性检查该属性是否适用于该状态。

用Python编写一个通用的有限状态机

class StateMachine:
def __init__(self):
self.handlers={}
self.startState=None
self.endStates=[]
def add_state(self,name,handler,end_state=0):
name=name.upper()
self.handlers[name]=handler
if end_state:
self.endStates.append(name)
def set_start(self,name):
self.startState=name.upper()
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 True:
(newState,cargo)=handler(cargo)
if newState.upper()in self.endStates:
print("reached",newState)
break
else:
handler=self.handlers[newState.upper()]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonVerstehen Sie Zustandsmaschinen in Python und wie Sie sie implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:163.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!