2016-05-30 8 views
0

Ich versuche derzeit, die implementation des endlichen Automaten in Python zu verstehen.Finite State Machine: Erklären Sie, was die folgende Codezeile macht

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

Ich kann nicht verstehen, was (diese Linie) tut. Ich nehme an, dass Handler (Ladung) den Namen des nächsten Zustand kehrt auf den Wert von Ladung entsprechenden, aber Handler Wörterbuch Handler nicht verwandt zu sein scheint.

Also, können Sie mir bitte sagen, was diese Linie tut, oder wo finde ich weitere Informationen zu dieser Art von Operation? Vielen Dank im Voraus.

+1

'Handler()' gibt eine Zwei-Element-Tupel; '(newState, cargo) = handler (cargo)' entpackt das Tupel in zwei Namen ... – dawg

+1

ein paar Zeilen weiter oben: 'try: handler = self.handlers [self.startState]' erklärt das was "handler" ist? –

+0

@ TadhgMcDonald-Jensen Ja, ich verstehe. 'Handler' ist in diesem Fall wie eine Referenz auf eine Funktion. Habe ich recht? –

Antwort

1

handlers ist eine Zuordnung von Zustandsnamen zu Übergangsfunktionen. handler ist die Übergangsfunktion für den aktuellen Status.

Zunächst ist handler auf die Übergangsfunktion für den Startzustand eingestellt. Bei jeder Iteration der Schleife wird die aktuelle handler-Funktion für den aktuellen Wert cargo aufgerufen. Diese Funktion gibt den nächsten Status und einen aktualisierten Frachtwert zurück. Die Zeile, die Sie aufgerufen haben, nimmt diese beiden Werte und weist sie newState bzw. cargo zu. Danach prüft der Code, ob der neue Zustand ein Endzustand ist. Wenn dies der Fall ist, wird die Schleife beendet. Wenn nicht, wird der Wert handler auf die Übergangsfunktion des neuen Zustands aktualisiert, und die Schleife wird fortgesetzt.


Beispiel der "Tupel Zuordnung" Syntax:

>>> 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

Vielen Dank für die Erklärung. Jetzt verstehe ich, wie dieses Programm funktioniert. –