Working around a lack of 'goto' in python

Roy Smith roy at panix.com
Sun Mar 7 13:54:33 EST 2004


Stephen Horne <steve at ninereeds.fsnet.co.uk> wrote:

> a goto is the natural representation of a transition between states.

Except that a goto allows the code for a state to be fallen into from 
the top.

The best way I know to implement a state machine in Python is one 
function for each state, and have each function return the next state, 
or perhaps an (output, nextState) tuple.  Your main loop then becomes 
something like:

   state = start
   while state != end:
      nextState, output = state (input)
      print output
      state = nextState
 
I would use a similar strategy in a language like C or C++ which allowed 
you to pass function pointers around.

I've implemented state machines in Perl with a huge multi-way 
if/elif/elif/else statement.  It's pretty ugly, but it beats gotos.



More information about the Python-list mailing list