日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 状态机教程_python 实用工具状态机transitions

發(fā)布時(shí)間:2025/3/21 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 状态机教程_python 实用工具状态机transitions 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說明

1. 狀態(tài)機(jī)是一個(gè)非常實(shí)用的理論。在涉及到復(fù)雜的場(chǎng)景,建立狀態(tài)機(jī)模型,能帶來極大的方便。比如,網(wǎng)絡(luò)連接、模型狀態(tài)、業(yè)務(wù)邏輯。

2. 狀態(tài)機(jī)并不復(fù)雜, 重要的是它的思想,能夠極大減輕復(fù)雜度。使用時(shí)關(guān)鍵在于定義好事件和動(dòng)作。

基本概念

State: 狀態(tài)

Event: 事件. 事件觸發(fā)狀態(tài)變換

Action: 動(dòng)作. event發(fā)生前或后執(zhí)行的動(dòng)作

transition: 變換. 狀態(tài)變換

github

https://github.com/pytransitions/transitions

安裝

pip install transitions

簡(jiǎn)單示例

# 連接協(xié)議狀態(tài)機(jī)

from transitions.extensions import HierarchicalMachine as Machine

from transitions.extensions.nesting import NestedState

class ConnectionStateMachine:

"""Connection state machine."""

def __init__(self, callbacks=None):

"""

:param callbacks: callbacks for the state machine

"""

self.callbacks = {}

# 定義狀態(tài)

self.states = ["STATE_NOT_CONNECTED",

{

"name": "STATE_CONNECTED",?? # 狀態(tài)名

"on_enter": self._on_enter_CONNECTED,? # 進(jìn)入狀態(tài)觸發(fā)

"on_exit": self._on_exit_CONNECTED,??? # 退出狀態(tài)觸發(fā)

"children": [???? # 狀態(tài)嵌套

"STATE_NOT_SELECTED",

{

"name": "STATE_SELECTED",

"on_enter": self._on_enter_CONNECTED_SELECTED

}

]

}]

# transition 1

self.machine = Machine(model=self, states=self.states, initial="STATE_NOT_CONNECTED", auto_transitions=False)

if callbacks:

self.callbacks = callbacks

# 定義狀態(tài)變換

self.machine.add_transition("connect", "STATE_NOT_CONNECTED", "STATE_CONNECTED_NOT_SELECTED")? # transition 2

self.machine.add_transition("disconnect", "STATE_CONNECTED", "STATE_NOT_CONNECTED")? # transition 3

self.machine.add_transition("select", "STATE_CONNECTED_NOT_SELECTED", "STATE_CONNECTED_SELECTED")? # transition 4

self.machine.add_transition("deselect", "STATE_CONNECTED_SELECTED", "STATE_CONNECTED_NOT_SELECTED")? # transition 5

self.machine.add_transition("timeoutT7", "STATE_CONNECTED_NOT_SELECTED", "STATE_NOT_CONNECTED")? # transition 6

# 事件觸發(fā)的動(dòng)作

def _on_enter_CONNECTED(self):

if "on_enter_CONNECTED" in self.callbacks:

self.callbacks["on_enter_CONNECTED"]()

def _on_exit_CONNECTED(self):

if "on_exit_CONNECTED" in self.callbacks:

self.callbacks["on_exit_CONNECTED"]()

def _on_enter_CONNECTED_SELECTED(self):

if "on_enter_CONNECTED_SELECTED" in self.callbacks:

self.callbacks["on_enter_CONNECTED_SELECTED"]()

定義狀態(tài)機(jī)

# 一般都是兩種:不嵌套、嵌套

from transitions import Machine?? #不嵌套

from transitions.extensions import HierarchicalMachine as Machine # 嵌套

# 檢查狀態(tài)

machine.state

machine.is_()

定義狀態(tài)

# 狀態(tài)可以是三種類型: 對(duì)象、字符串、字典

from transitions import State

states = [

State(name="solid"),??? # 對(duì)象

"liquid",?????????????? # 字符串

{"name": "gas"}???????? # 字典

]

定義變換

# 定義函數(shù)

machine.add_transition(trigger, source, dest, )

trigger(str)???????? 方法名,觸發(fā)狀態(tài)轉(zhuǎn)換

source(str or list)? 源狀態(tài)

dest(str)??????????? 目標(biāo)狀態(tài)

# 加上變換

machine.add_transition(trigger="wake_up", source="asleep", dest="hanging out")

machine.add_transition("work_out", "hanging out", "hungry")

machine.add_transition("nap", "*", "asleep")?? # 從任意狀態(tài)變?yōu)閍sleep

以上就是python 實(shí)用工具狀態(tài)機(jī)transitions的詳細(xì)內(nèi)容,更多關(guān)于python transitions的資料請(qǐng)關(guān)注云海天教程其它相關(guān)文章!

原文鏈接:http://yongqing.is-programmer.com/posts/215592.html

總結(jié)

以上是生活随笔為你收集整理的python 状态机教程_python 实用工具状态机transitions的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。