在模型中,將乙個或多個狀態定義為終態(end state),僅將乙個狀態定義為初始狀態(start state)(呼叫類方法對此進行配置)。每個處理程式都有某種必需的結構;處理程式將執行一系列操作,然後過一會兒,它帶著乙個標記返回到 statemachine.run() 方法中的迴圈內,該標記指出了想得到的下乙個狀態。同樣,用 cargo 變數允許乙個狀態把一些(未處理的)資訊傳遞給下乙個狀態。
我介紹的 statemachine 類的典型用途是以乙個有狀態的方式使用輸入。例如,我所用的乙個文字處理工具(txt2html)從乙個檔案中讀取數行內容;依據每行所屬的類別,需要以特殊的方式對其進行處理。然而,您經常需要看看前面幾行提供的上下文來確定當前行屬於哪個類別(以及應該怎樣處理它)。構建在 statemachine 類上的這個過程的實現可以定義乙個 a 處理程式,該處理程式讀取幾行,然後以類似 a 的方式處理這些行。不久,滿足了乙個條件,這樣下一批的幾行內容就應該由 b 處理程式來處理了。 a 把控制傳遞歸 .run() 迴圈,同時指示切換到 b 狀態 ― 以及任何 a 不能正確處理的、 b 應該在閱讀額外的幾行之前處理的額外的行。最後,某個處理程式將它的控制傳遞給某個被指定為終態的狀態,處理停止(halt)。
對於前面一部分中的具體**示例,我使用了乙個簡化過的應用程式。我處理由迭代函式產生的數字流,而不是處理多行內容。每個狀態處理程式僅列印那些在期望的數字範圍內的數字(以及關於有效狀態的一些訊息)。當數字流中的乙個數字傳到乙個不同的範圍內,另乙個不同的處理程式就會接管「處理」。對於這一部分,我們將看看另一種用生成器實現相同數字流處理的方式(有一些額外的技巧和功能)。但是,乙個更複雜的生成器示例有可能對更象上一段中提到的輸入流進行處理。我們再來看看前乙個狀態機刪減過**的版本:
清單 1. statemachine_test.py
python 狀態機 Python 狀態機
class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...
python 狀態機教程 文字處理狀態機
狀態機是關於設計程式來控制應用程式中的流程。它是乙個有向圖,由一組節點和一組過渡函式組成。處理文字檔案通常包括順序讀取文字檔案的每個塊並執行某些操作以響應每個塊讀取。塊的含義取決於它之前存在的塊的型別以及它之後的塊。該機器是關於設計程式來控制應用程式中的流程。它是乙個有向圖,由一組節點和一組過渡函式...