2023年6月29日发(作者:)
python状态机库_Python的Transitions库实现有限状态机(FSM)有限状态机(Finite-state machine, FSM),⼜称有限状态⾃动机,简称状态机,是表⽰有限个状态以及在这些状态之间的转移和动作等⾏为的数学模型。FSM是⼀种算法思想,简单⽽⾔,有限状态机由⼀组状态、⼀个初始状态、输⼊和根据输⼊及现有状态转换为下⼀个状态的转换函数组成。现实世界中存在⼤量具有有限个状态的系统:钟表系统、电梯系统、交通信号灯系统、通信协议系统、正则表达式、硬件电路系统设计、软件⼯程,编译器等,有限状态机的概念就是来⾃于现实世界中的这些有限系统。transitions是⼀个由Python实现的轻量级的、⾯向对象的有限状态机框架。transitions最基本的⽤法如下:先⾃定义⼀个类Matter定义⼀系列状态和状态转移(定义状态和状态转移有多种⽅式,官⽹上给了最快速理解的⼀个例⼦)初始化状态机4.获取当前的状态或者进⾏转化from transitions import Machineclass Matter(object):passmodel = Matter()#The states argument defines the name of statesstates=['solid', 'liquid', 'gas', 'plasma']# The trigger argument defines the name of the new triggering methodtransitions = [{'trigger': 'melt', 'source': 'solid', 'dest': 'liquid' },{'trigger': 'evaporate', 'source': 'liquid', 'dest': 'gas'},{'trigger': 'sublimate', 'source': 'solid', 'dest': 'gas'},{'trigger': 'ionize', 'source': 'gas', 'dest': 'plasma'}]machine = Machine(model=model, states=states, transitions=transitions, initial='solid')# Testprint() # ()print() # ate()print()上⾯那个例⼦是物体的⼏个状态的转换,如下图:状态变化图.png当然transitions库还有更⾼阶⼀点的⽤法,⽐如直接显⽰出图形,官⽹上是说可以⽤pygraphviz 来显⽰,但是本⾝pygraphviz 在windows上有⼀些问题,所以没有试验成功,等以下问题修复后准备再次尝试。可能有的同学好奇这个transitions库对于我们测试有什么帮助呢?⼤家还记得测试设计⽅法中有⼀种称之为 状态迁移法 么?其实在设计测试⽤例的时候,需要在各种状态之间迁移并且最好能够做到随机的处理。这部分状态迁移的测试⽤例在⾃动化的时候,Transitions库能在这⽅⾯对我们有⼀定的帮助。from transitions import Machineclass AModel(object):def __init__(self): = 0 # state variable of the ions = { # each state'sA': 0,'sB': 3,'sC': 6,'sD': 0,}def poll(self):if >= ions[]:_state() # go to next stateelse:getattr(self, 'to_%s' % )() # enter current state againdef on_enter(self):print('entered state %s' % )def on_exit(self):print('exited state %s' % )# setup model and state machinemodel = AModel()# init transitions modellist_of_states = ['sA', 'sB', 'sC', 'sD']machine = Machine(model=model, states=list_of_states, initial='sA',ordered_transitions=True, before_state_change='on_exit',after_state_change='on_enter')# begin mainfor i in range(0, 10):print('iter is: ' + str(i) + " -model state is:" + ) = ()上⾯这段代码执⾏的时候的效果如下:iter is: 0 -model state is:sAexited state sAentered state sBiter is: 1 -model state is:sBexited state sBentered state sBiter is: 2 -model state is:sBexited state sBentered state sBiter is: 3 -model state is:sBexited state sBentered state sCiter is: 4 -model state is:sCexited state sCentered state sCiter is: 5 -model state is:sCexited state sCentered state sCiter is: 6 -model state is:sCexited state sCentered state sDiter is: 7 -model state is:sDexited state sDentered state sAiter is: 8 -model state is:sAexited state sAentered state sBiter is: 9 -model state is:sBexited state sBentered state sC
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687977631a62890.html
评论列表(0条)