最近琢磨撸个小家电(雾),要用到状态机,比如开了之后调节温度,定时,启动,暂停啥的,每个状态能跳到特定的几个状态里面去。
然后看了别人写的python状态机,啊那个接口写的我实在看不懂,自己上手抄吧,又感觉python写接口怪怪的,味道不太对。然后上网查了发现python的设计模式好像跟c++和java不一样,于是就有了这个蠢代码……
代码不多,三十行,非常简陋,也没有纠错机制。就这我还标错了个东西,琢磨半天yield generator啥的,结果发现根本不是那回事。关键点在于:直接返回下一状态的函数名就好啦~
0状态在输入奇数的时候变成1状态,输入偶数不变;1状态在输入奇数的时候变成0状态,输入偶数也是不变。
in_list = [1, 1, 1, 1, 0, 0, 2, 0, 3, 5, 3] def state0(input0): print("状态0") print("input0=" + str(input0)) if input0 % 2 == 0: return state0 else: return state1 def state1(input1): print("状态1") print("input1=" + str(input1)) if input1 % 2 == 0: return state1 else: return state0 if __name__ == '__main__': i = state0 num = 1 for t in in_list: print('--------\n循环轮次:' + str(num)) i = i(t) num += 1