2016-05-30 64 views
0

我目前正試圖理解Python中有限狀態機的implementation有限狀態機:解釋下面的代碼行是什麼

while True: 
     (newState, cargo) = handler(cargo) #(this line) 
     if newState.upper() in self.endStates: 
      print("reached ", newState) 
      break 
     else: 
      handler = self.handlers[newState.upper()]  

我不明白什麼(此行)一樣。我想,處理器(貨物)返回對應貨物的值的下一個國家的名字,但處理器似乎無關處理字典。

那麼,你能告訴我這條線是幹什麼的,或者我可以在哪裏找到更多與這種手術有關的信息?先謝謝你。

+1

'處理程序()'返回一個兩個元件的元組; '(newState,cargo)=處理程序(貨物)'把這個元組解包成兩個名字...... – dawg

+1

上面幾行:'try:handler = self.handlers [self.startState]'是否解釋了'handler'是什麼? –

+0

@ TadhgMcDonald-Jensen是的,知道我明白。 '處理程序'就像在這種情況下對函數的引用。我對嗎? –

回答

1

handlers是從狀態名到轉換函數的映射。 handler是當前狀態的轉換函數。

最初handler設置爲啓動狀態的轉換函數。在循環的每次迭代中,將在當前值cargo上調用當前的handler函數。該功能返回下一個狀態和更新的貨物值。您呼叫的線路取這兩個值,並將它們分別指定爲newStatecargo。之後,代碼檢查新狀態是否是結束狀態。如果是,則循環終止。否則,將handler的值更新爲新狀態的轉換函數,並繼續循環。的 「元組分配」 語法的


實施例:

>>> def foo(): 
...  return 1, 2, 3 
... 
>>> a, b, c = foo() # parentheses on left side of = are optional 
>>> a 
1 
>>> b 
2 
>>> c 
3 
>>> a, b, c 
(1, 2, 3) 
+0

謝謝你的解釋。現在我明白這個程序是如何工作的。 –