亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python 實用工具狀態(tài)機(jī)transitions

 更新時間:2020年11月21日 17:21:17   作者:妙音  
這篇文章主要介紹了python 實用工具狀態(tài)機(jī)transitions的使用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

說明 

1. 狀態(tài)機(jī)是一個非常實用的理論。在涉及到復(fù)雜的場景,建立狀態(tài)機(jī)模型,能帶來極大的方便。比如,網(wǎng)絡(luò)連接、模型狀態(tài)、業(yè)務(wù)邏輯。 
2. 狀態(tài)機(jī)并不復(fù)雜, 重要的是它的思想,能夠極大減輕復(fù)雜度。使用時關(guān)鍵在于定義好事件和動作。 

基本概念 

  • State: 狀態(tài)
  • Event: 事件. 事件觸發(fā)狀態(tài)變換
  • Action: 動作. event發(fā)生前或后執(zhí)行的動作
  • transition: 變換. 狀態(tài)變換

github

https://github.com/pytransitions/transitions

安裝

pip install transitions

簡單示例

# 連接協(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ā)的動作
    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_<state_name>()

定義狀態(tài)

# 狀態(tài)可以是三種類型: 對象、字符串、字典
from transitions import State
states = [
    State(name="solid"),    # 對象
    "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 實用工具狀態(tài)機(jī)transitions的詳細(xì)內(nèi)容,更多關(guān)于python transitions的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 通過python連接Linux命令行代碼實例

    通過python連接Linux命令行代碼實例

    這篇文章主要介紹了通過python連接Linux命令行代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python實現(xiàn)測試工具(一)——命令行發(fā)送get請求

    python實現(xiàn)測試工具(一)——命令行發(fā)送get請求

    這篇文章主要介紹了python如何實現(xiàn)命令行發(fā)送get請求,幫助大家更好的利用python進(jìn)行測試工作,感興趣的朋友可以了解下
    2020-10-10
  • 解決Python print 輸出文本顯示 gbk 編碼錯誤問題

    解決Python print 輸出文本顯示 gbk 編碼錯誤問題

    這篇文章主要介紹了解決Python print 輸出文本顯示 gbk 編碼錯誤問題,本文給出了三種解決方法,需要的朋友可以參考下
    2018-07-07
  • python實現(xiàn)刪除文件與目錄的方法

    python實現(xiàn)刪除文件與目錄的方法

    這篇文章主要介紹了python實現(xiàn)刪除文件與目錄的方法,詳細(xì)的分析了涉及Python文件操作的各種方法,需要的朋友可以參考下
    2014-11-11
  • python編寫實現(xiàn)抽獎器

    python編寫實現(xiàn)抽獎器

    這篇文章主要為大家詳細(xì)介紹了python編寫實現(xiàn)抽獎器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 利用python對mysql表做全局模糊搜索并分頁實例

    利用python對mysql表做全局模糊搜索并分頁實例

    這篇文章主要介紹了利用python對mysql表做全局模糊搜索并分頁實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 詳解pandas.DataFrame.plot() 畫圖函數(shù)

    詳解pandas.DataFrame.plot() 畫圖函數(shù)

    這篇文章主要介紹了詳解pandas.DataFrame.plot()畫圖函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)銀行實戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python中xml和dict格式轉(zhuǎn)換的示例代碼

    Python中xml和dict格式轉(zhuǎn)換的示例代碼

    最近在做APP的接口,遇到XML格式的請求數(shù)據(jù),費(fèi)了很大勁來解決,下面小編給大家分享下Python中xml和dict格式轉(zhuǎn)換問題,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • Python異步編程入門教程指南

    Python異步編程入門教程指南

    Python作為一門流行的編程語言,提供了強(qiáng)大的異步編程支持,本文將深入探討Python異步編程的基礎(chǔ)概念、常用庫以及實際應(yīng)用,通過豐富的示例代碼,助你更全面地理解和應(yīng)用異步編程
    2024-01-01

最新評論