广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python状态机transitions库的示例分析
  • 645
分享到

python状态机transitions库的示例分析

2023-06-15 08:06:43 645人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python状态机transitions库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介 transitions库pip&nbs

这篇文章主要介绍了python状态机transitions库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、简介

 transitions库

pip install transitions

状态机

state:状态节点

transition:用于从一个状态节点移动到另一个状态节点

教程

https://pypi.org/project/transitions/

二、逐步创建

创建对象

创建一个继承object的类Number的实体对象number,然后调用transitions.Machine()将状态机绑定到这个实体对象上。

from transitions import Machineclass Number(object):    pass    number = Number()machine = Machine(model=number)

然后我们得到了两个东西,一个是状态机machine,一个是具体的实体对象number,。
之后设定状态机是用machine,运行状态机是用具体的实体对象number

添加state

state可以指定:

  • name:状态节点的名字,必须指定。

  • on_enter:进入该状态节点会产生的事件(注意,初始节点不会调用,因为已经进入了。见【验证代码】)

  • on_exit:退出该状态节点会产生的事件

'''构造简单的state'''# 只指定名字zero = '0'# 通过State()from transitions import Stateone = State('1')# 构造字典two = {'name':'2'}
'''构造复杂的State'''class Number(object):    def hello(self):        print('hello')    passzero = '0'from transitions import Stateone = State('1', on_enter=['hello'], on_exit=['hello'])two = {'name':'2', 'on_enter':['hello'], 'on_exit':['hello']}
'''添加state'''# 逐个machine.add_states(zero)# 一起添加machine.add_states([one, two])

添加transition

transition需要指定三个东西:

  • trigger:表示transition的名字(注意,不能和Number类中方法重名了)

  • source:原状态节点

  • dest:目标转态节点

machine.add_transition('zero_to_one', source='0', dest='1')    # 有效machine.add_transition('zero_to_one', source='1', dest='2')    # 无效

注意,只有第一个匹配zero_to_one的transition有效。因此,上面最后一行中定义的转换不会做任何事情。

三、直接初始化创建

states = [    {'name':'0'},    {'name':'1'},    {'name':'2', 'on_enter':['hello'], 'on_exit':['hello']},]
# way1transitions = [    { 'trigger': 'zero_to_one', 'source': '0', 'dest': '1' },    { 'trigger': 'zero_to_two', 'source': '0', 'dest': '2' },    { 'trigger': 'one_to_two', 'source': '1', 'dest': '2' },    { 'trigger': 'any_to_zero', 'source': '*', 'dest': '0' },   # 任意前状态 '*']# way2transitions = [    ['zero_to_one', '0', '1' ],    ['one_to_two', '1', '2' ],    ['any_to_zero', '*', '0' ],    # 任意前状态 '*']
from transitions import Machineclass Number(object):    def hello(self):        print('hello')    pass    number = Number()machine = Machine(model=number, states=states, initial=states[0]['name'],transitions=transitions)

四、运行

输出当前状态

now_state = number.stateprint(now_state)

判断当前状态

格式:is_«state name»()。返回True False。

number.is_0()

强行移动状态

格式:to_«state name»()。返回True;如果移动到不存在的状态节点从而失败,那么抛出AttributeError

number.to_2()

获取到某个状态的transition

machine.get_triggers('0')# ['to_0', 'to_1', 'to_2', 'zero_to_one', 'any_to_zero']

调用transition

# way 1number.zero_to_one()# way 2number.trigger('zero_to_one')

附录

什么叫做初始状态已经进入

from transitions import Machineclass Number(object):    def hello(self):        print('hello')    passnumber = Number()states = [    {'name':'0', 'on_enter':['hello']},    {'name':'1'},    {'name':'2'},]transitions = [    { 'trigger': 'zero_to_one', 'source': '0', 'dest': '1' },    { 'trigger': 'zero_to_two', 'source': '0', 'dest': '2' },    { 'trigger': 'one_to_two', 'source': '1', 'dest': '2' },    { 'trigger': 'any_to_zero', 'source': '*', 'dest': '0' },   # 任意前状态 '*']Machine(model=number, states=states, initial=states[0]['name'],transitions=transitions)init_state = number.stateprint(init_state)number.zero_to_one()print(number.state)number.any_to_zero()print(number.state)'''0# 第一次不会调用,因为已经进入了1hello# 再进来时才调用0'''

感谢你能够认真阅读完这篇文章,希望小编分享的“Python状态机transitions库的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网Python频道,更多相关知识等着你来学习!

--结束END--

本文标题: python状态机transitions库的示例分析

本文链接: https://www.lsjlt.com/news/278932.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python状态机transitions库的示例分析
    这篇文章主要介绍了python状态机transitions库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介 transitions库pip&nbs...
    99+
    2023-06-15
  • python状态机transitions库详解
    目录一、简介二、逐步创建三、直接初始化创建四、运行附录一、简介  transitions库 pip install transitions 状态机 state:状态...
    99+
    2022-11-12
  • SQLSERVER数据库状态的示例分析
    这篇文章主要介绍SQLSERVER数据库状态的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 案例 前两天在处理一个客户问题,突然某个数据库无法访问了。数据库...
    99+
    2022-10-19
  • HTTP状态码的示例分析
    这篇文章将为大家详细讲解有关HTTP状态码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTTP 状态码1、状态码分类  - 1xx:信息,服务器收到...
    99+
    2022-10-19
  • MySQL线程状态的示例分析
    这篇文章主要介绍了MySQL线程状态的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文章目录一、show processlist二、...
    99+
    2022-10-18
  • SAP用户状态的示例分析
    小编给大家分享一下SAP用户状态的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SAP用户状态详解SAP存放业务对象的表在sap中,包括订单、项目(项目立...
    99+
    2023-06-05
  • EBS OM发运状态wsh_delivery_details.RELEASED_STATUS的示例分析
    这篇文章主要为大家展示了“EBS OM发运状态wsh_delivery_details.RELEASED_STATUS的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研...
    99+
    2022-10-19
  • vuex状态管理模式的示例分析
    小编给大家分享一下vuex状态管理模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言本次接受一个BI系统,要求...
    99+
    2022-10-19
  • java之Hibernate状态整理的示例分析
    这篇文章主要介绍了java之Hibernate状态整理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java有哪些集合类Java中的集合主要分为四类:1、List列...
    99+
    2023-06-14
  • Java线程安全状态的示例分析
    这篇文章主要为大家展示了“Java线程安全状态的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java线程安全状态的示例分析”这篇文章吧。一、观察线程的所有状态线程的状态是一个枚举类型 ...
    99+
    2023-06-29
  • Linux动态库和静态库的示例分析
    今天就跟大家聊聊有关Linux动态库和静态库的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数库分为静态库和动态库两种。创建Linux静态库和Linux动态库和使用它们在这...
    99+
    2023-06-16
  • vue组件化开发种vuex状态管理库的示例分析
    这篇文章主要介绍vue组件化开发种vuex状态管理库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中...
    99+
    2022-10-19
  • JS设计模式之状态模的示例分析
    这篇文章主要介绍了JS设计模式之状态模的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 概述当一个对象的内在状态改变时允许改变其...
    99+
    2022-10-19
  • AJAX页面状态保持思路的示例分析
    这篇文章主要为大家展示了“AJAX页面状态保持思路的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AJAX页面状态保持思路的示例分析”这篇文章吧。传统的...
    99+
    2022-10-19
  • vuejs中vuex状态管理模式的示例分析
    这篇文章给大家分享的是有关vuejs中vuex状态管理模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关于vuex类的新闻最近很多,看到眼热就去查了下资料,然后扯出来...
    99+
    2022-10-19
  • Vue 2.X中状态管理vuex的示例分析
    这篇文章将为大家详细讲解有关Vue 2.X中状态管理vuex的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。示例:记住上述的顺序情况:想要改变state,只能通过...
    99+
    2022-10-19
  • MySQL查询事务状态字段的示例分析
    这篇文章主要介绍了MySQL查询事务状态字段的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、information_schema...
    99+
    2022-10-18
  • vue中状态管理模式vuex的示例分析
    这篇文章主要介绍了vue中状态管理模式vuex的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vuex是一个专门为vue.js设计的...
    99+
    2022-10-19
  • Xamarin.Forms中程序状态与进度的示例分析
    小编给大家分享一下Xamarin.Forms中程序状态与进度的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Xamarin.Forms中程序状态与进度在X...
    99+
    2023-06-04
  • Android 媒体开发之MediaPlayer状态机接口方法的示例分析
    这篇文章主要为大家展示了“Android 媒体开发之MediaPlayer状态机接口方法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android 媒体开发之MediaPlayer状...
    99+
    2023-05-30
    android mediaplayer
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作