• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python状态机transitions库详解

    一、简介

     transitions库

    pip install transitions

    状态机

    state:状态节点

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

    教程

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

    二、逐步创建

    创建对象

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

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

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

    添加state

    state可以指定:

    '''
    构造简单的state
    '''
    # 只指定名字
    zero = '0'
    
    # 通过State()
    from transitions import State
    one = State('1')
    
    # 构造字典
    two = {'name':'2'}
    '''
    构造复杂的State
    '''
    class Number(object):
        def hello(self):
            print('hello')
        pass
    
    zero = '0'
    
    
    from transitions import State
    one = 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需要指定三个东西:

    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']},
    ]
    # way1
    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' },   # 任意前状态 '*'
    ]
    
    # way2
    transitions = [
        ['zero_to_one', '0', '1' ],
        ['one_to_two', '1', '2' ],
        ['any_to_zero', '*', '0' ],    # 任意前状态 '*'
    ]
    
    from transitions import Machine
    
    class 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.state
    print(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 1
    number.zero_to_one()
    
    # way 2
    number.trigger('zero_to_one')

    附录

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

    from transitions import Machine
    
    class Number(object):
        def hello(self):
            print('hello')
        pass
    number = 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.state
    print(init_state)				
    
    number.zero_to_one()
    print(number.state)
    
    number.any_to_zero()			
    print(number.state)
    '''
    0		# 第一次不会调用,因为已经进入了
    1
    hello	# 再进来时才调用
    0
    '''
    

    到此这篇关于python进阶之状态机transitions库详解的文章就介绍到这了,更多相关python状态机transitions库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python 实用工具状态机transitions
    • 简单理解Python中基于生成器的状态机
    • 状态机的概念和在Python下使用状态机的教程
    • 浅谈python中常用的excel模块库
    • Python 中拼音库 PyPinyin 用法详解
    • 教你使用Python pypinyin库实现汉字转拼音
    • python munch库的使用解析
    • Python爬虫基础之selenium库的用法总结
    • python爬虫之selenium库的安装及使用教程
    上一篇:python爬取某网站原图作为壁纸
    下一篇:Python 如何实现文件自动去重
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python状态机transitions库详解 python,状态机,transitions,库,