状态机 python_Python状态机设计

我真的不明白这个问题。设计模式非常清晰。请参阅Design Patterns book。class SuperState( object ):

def someStatefulMethod( self ):

raise NotImplementedError()

def transitionRule( self, input ):

raise NotImplementedError()

class SomeState( SuperState ):

def someStatefulMethod( self ):

actually do something()

def transitionRule( self, input ):

return NextState()

这是非常普通的样板,用于爪哇、C++、Python(我也肯定其他语言)。

如果您的状态转换规则碰巧是微不足道的,那么有一些优化可以将转换规则本身推送到超类中。

注意,我们需要有前向引用,所以我们按名称引用类,并使用eval将类名转换为实际的类。另一种方法是生成转换规则实例变量而不是类变量,然后在定义所有类之后创建实例。class State( object ):

def transitionRule( self, input ):

return eval(self.map[input])()

class S1( State ):

map = { "input": "S2", "other": "S3" }

pass # Overrides to state-specific methods

class S2( State ):

map = { "foo": "S1", "bar": "S2" }

class S3( State ):

map = { "quux": "S1" }

在某些情况下,您的事件不像测试对象的相等性那么简单,因此更一般的转换规则是使用正确的函数-对象对列表。class State( object ):

def transitionRule( self, input ):

next_states = [ s for f,s in self.map if f(input) ]

assert len(next_states) >= 1, "faulty transition rule"

return eval(next_states[0])()

class S1( State ):

map = [ (lambda x: x == "input", "S2"), (lambda x: x == "other", "S3" ) ]

class S2( State ):

map = [ (lambda x: "bar" <= x <= "foo", "S3"), (lambda x: True, "S1") ]

由于规则是按顺序计算的,因此允许使用“默认”规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux games账号,linux for games

linux for games最近对linux 游戏发行版系统产生了兴趣&#xff0c;下面简要记录一些链接&#xff1a;https://itsfoss.com/linux-gaming-distributions/ (9 款游戏系统)https://fedoraproject.org/wiki/Games_Lab (fedora 游戏发行版 wiki)https://thishosting.rocks/best-lin…

jpa 自定义sql if_mybatis仿jpa 使用@createDate @updateDate

最近在使用mybatis的时候发现一个问题,就是好多的时候保存实体的时候&#xff0c;都要set create 和update,这样很麻烦&#xff0c;有没有可能类似jap 使用注解自动生成。jpa 的注解原理也拦截sql ,把sql 里面的参数绑定给修改一下。 了解了原理&#xff0c;我们也就自己可以可…

linux系统每月定时重启,linux系统定时重启.doc

linux系统定时重启linux系统定时重启--------------------每个月1号凌晨3点自动重启步骤如下&#xff1a;1、用root帐号登陆&#xff1b;2、打开终端窗口&#xff1b;3、输入"crontab -e"4、按Insert键。5、输入"0 3 1 * * reboot"6、按esc键。7、输入&quo…

卡牌大师怎么玩_用卡牌大师如何上分

联盟界流传一句话&#xff0c;如果只玩一个英雄。德玛可以上白金&#xff0c;瑞文可以上砖石&#xff0c;而卡牌可以上王者。所以说玩好卡牌是可以快速上分的&#xff0c;卡牌拥有稳定的控制&#xff0c;AOE伤害&#xff0c;大招的快速支援&#xff0c;可以说是英雄里近乎完美的…

直线电机原理动画_最新的3D动画演示:同步电机原理及技术,一般人看不懂

据说每台交流电机都使用旋转磁场&#xff0c;这项发明掀起了工业革命。分享一下LearnEngineering最新制作的一个动画&#xff0c;讲解的是同步电机RMF的工作原理和技术发展&#xff1a;同步电动的工作原理是&#xff1a;RMF旋转磁场相互作用。恒速特性是通过恒定磁场和旋转磁场…

l2的最优回归_大白话5分钟带你走进人工智能-第15节L1,L2几何解释和Ridge等回归...

第15节 L1和L2正则几何解释和Ridge&#xff0c;Lasso&#xff0c;Elastic Net回归上一节中我们讲解了L1和L2正则的概念&#xff0c;知道了L1和L2都会使不重要的维度权重下降得多&#xff0c;重要的维度权重下降得少&#xff0c;引入L1正则会使不重要的w趋于0(达到稀疏编码的目的…

用python绘制图形_python绘制图形

1 2 File Name&#xff1a; draw3 Author&#xff1a; tim4 Date&#xff1a; 2018/8/15 16:475 Description&#xff1a; 图形绘制。十分有用&#xff0c;对于工作中实验性的项目&#xff0c;可以快速展示效果。如果使用java&#xff0c;还需要配合前端展示。6 7 8 importma…

linux中管道的概念,浅谈Linux管道

管道(pipe)是一个我们在学习Linux命令行的时候就会引入的一个很重要的概念。管道是UNIX环境中历史最悠久的进程间通信方式&#xff0c;从本质上说&#xff0c;管道也是一种文件&#xff0c;也是遵循UNIX的“一切皆文件”的原则设计的。虽然实现形态上是文件&#xff0c;但是管道…

ttl接地是高电平还是低电平_说明图3.12中各门电路的输出是高电平还是低电平。已知它们都是74HC系列的CMOS电路 简单的逻辑门电路 判断各门电路...

1、高电平&#xff0c;有关。2、低电平。3、输入端接电源&#xff0c;悬空或高阻(10k以上)相当于接高电平&#xff0c;接地为低电平&#xff0c;通过低阻接入电平信号则认为输入信号与接入电平相同。则为OC门。图中的第一个输入为高电平&#xff0c;电路为与非门&#xff0c;则…

linux redis安装报错,Linux安装Redis实现过程及报错解决方案

今天安装redis出现些之前安装不曾出现错误&#xff0c;一并在此做个记录一、安装redis及出现错误首先下载redis&#xff0c;官方下载地址页面&#xff1a;https://redis.io/download我们这里选择稳定版6.0.1版本正常安装步骤如下&#xff1a;[rootlocalhost ~]# yum install gc…

python 工资管理软件_4_python之路之模拟工资管理系统

#!/usr/bin/env python#_*_ coding: utf-8 _*_#author&#xff1a;chenjianwen#email&#xff1a;1071179133qq.com importsys,os##定义操作列表 ops [查询员工工资,修改员工工资,增加新员工记录,退出] info{}defget_info():##读取文件得到员工信息 globalinfo with open(info…

dateformat 返回类型_SpringBoot返回date日期格式化

SpringBoot返回date日期格式化&#xff0c;解决返回为TIMESTAMP时间戳格式或8小时时间差问题描述在Spring Boot项目中&#xff0c;使用RestController注解&#xff0c;返回的java对象中若含有date类型的属性&#xff0c;则默认输出为TIMESTAMP时间戳格式(数据库datetime类型查询…

linux gcc中sin30度,学习gcc.pdf

学习gcc如何在 Ubuntu 下安装和使用 gccGCC 是在Linux 系统中用的比较多的编译器&#xff0c;一般做Linux 开发的朋友都会用 GCC 编译器&#xff0c;但今天在 Ubuntu 上安装 GCC 时出现了问题&#xff0c;于是上网查询如何在Ubuntu 上安装 GCC&#xff0c;答案如下&#xff1a;…

python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 题目&#xff1a; 给定一个链表&#xff0c;删除其中倒数第k个节点。 代码&#xff1a; class LinkedListAlgorithms(object): def __init__(self): pass d…

工业机器人工具中心点标定的意义_一种利用平面标定板的机器人工具中心点标定方法_2015108676182_说明书_专利查询_专利网_钻瓜专利网...

技术领域本发明涉及机器人工具中心点(Toolcenterpoint,TCP)标定方法&#xff0c;尤其涉及一种利用平面标定板的机器人工具中心点标定方法。背景技术机器人工具中心点(Toolcenterpoint,TCP)是与机器人工具固连的工具坐标系的原点&#xff0c;工具实际工作点在工具坐标系中的坐标…

自动感光调节LED灯亮度C语言程序,单片机PWM调节LED灯亮度

刚搞完飞思卡尔智能车&#xff0c;昨天我一起做车的搭档跑来跟我说魏老师(我们系的前主任&#xff0c;不知道他们怎么认识的....)叫他帮忙做个可通过无线遥控调节LED灯亮度的设计方案&#xff0c;问我有没有兴趣做做&#xff0c;主要是魏老师也是受他以前的老同学(合工大的....…

python找到字符中空格所在的位置_Python 查找字符在字符串中的位置示例效果

Python 查找字符在字符串中的位置实例 下面为大家分享一篇Python 查找字符在字符串中的位置实例&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起过来看看吧 str_1wo shi yi zhi da da niu char_1i nPosstr_1.index(char_1) print(nPos) 运行结果&#xf…

ztree 自定义参数_Ztree节点前加上两个自定义按钮

前言&#xff1a;在我的权限管理模块遇到了给某些角色加权限的问题&#xff0c;这时就需要实现将每个模块做成树&#xff0c;在每个节点前加上预览和编辑的按钮&#xff0c;这样可以根据数据库的某个字段给每个角色赋权限。必须必须吐槽的是&#xff0c;这部分的功能在网上没找…

xilinx c语言编程,使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld

关于Xilinx SDSoc的介绍我就不再复述了&#xff0c;我理解的也不一定准确&#xff0c;可以阅读官方文档了解SDSoc&#xff0c;你可以把它理解为一个集成开发环境 (IDE)&#xff0c;通过SDSoc我们能够简单快速的对Xilinx的开发板进行编程&#xff0c;不用像传统的嵌入式编程那样…

python画图小猪佩奇_吊炸天!Python 20秒画出小猪佩奇

原标题&#xff1a;吊炸天&#xff01;Python 20秒画出小猪佩奇 今年社交平台上的带货女王是谁?范冰冰?杨幂?Angelababy?不&#xff0c;是猪猪女孩小猪佩奇。 小猪佩奇在构图基本是各种曲线&#xff0c;类抛物线、类圆、类椭圆、类二次贝塞尔曲线。因为画图画曲线不是Pytho…