說明
1. 狀態機是乙個非常實用的理論。在涉及到複雜的場景,建立狀態機模型,能帶來極大的方便。比如,網路連線、模型狀態、業務邏輯。
2. 狀態機並不複雜, 重要的是它的思想,能夠極大減輕複雜度。使用時關鍵在於定義好事件和動作。
基本概念
github
安裝pip install transitions
簡單示例
# 連線協議狀態機
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 = {}
# 定義狀態
self.states = ["state_not_connected",]}]
# transition 1
self.machine = machine(model=self, states=self.states, initial="state_not_connected", auto_transitions=false)
if callbacks:
self.callbacks = callbacks
# 定義狀態變換
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.'deselect', "state_connected_selected", "state_connected_not_selected") # transition 5
self.machine.add_transition('timeoutt7', "state_connected_not_selected", "state_not_connected") # transition 6
# 事件觸發的動作
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"]()
定義狀態機
# 一般都是兩種:不巢狀、巢狀
from transitions import machine #不巢狀
from transitions.extensions import hierarchicalmachine as machine # 巢狀
# 檢查狀態
machine.state
machine.is_()
定義狀態
# 狀態可以是三種型別: 物件、字串、字典
from transitions import state
states = [
state(name="solid"), # 物件
"liquid", # 字串
# 字典
]定義變換
# 定義函式
machine.add_transition(trigger, source, dest, )
trigger(str) 方法名,觸發狀態轉換
source(str or list) 源狀態
dest(str) 目標狀態
# 加上變換
machine.add_transition(trigger="wake_up", source="asleep", dest="hanging out")
machine.add_tran程式設計客棧sition('work_out', 'hanging out', 'hungry')
machine.add_transition('nap', '*', 'asleep') # 從任意狀態變為asleep
實用工具狀態機transitions
狀態機是乙個非常實用的理論。在涉及到複雜的場景,建立狀態機模型,能帶來極大的方便。比如,網路連線 模型狀態 業務邏輯。狀態機並不複雜,重要的是它的思想,能夠極大減輕複雜度。使用時關鍵在於定義事件和動作。state 狀態 event 事件.事件觸發狀態變換 action 動作.event發生前或後執行...
linux實用工具
基本實用工具 ls 顯示檔名 list cat 顯示文字檔案內容 rm i 刪除檔案 remove i開啟選項 less more 分屏顯示檔案 hostname 顯示系統名 檔案操作 cp sourcefile destinationfile 複製檔案copy mv oldname newname...
Linux實用工具
特殊字元 轉義字元可以用 括起來,也可以在前面加上 基礎的一些命令 列出檔名 ls 顯示檔案文字內容 cat 刪除檔案 rm 顯示系統名 hostname 複製檔案 cp 更改檔名 mv 列印檔案 lpr 查詢字串 grep 顯示頭,尾檔案 head,tail 按順序顯示檔案內容 sort 刪除檔案...