function jumptable idiom
Fredrik Lundh
effbot at telia.com
Thu Mar 9 12:27:42 EST 2000
Brian E Gallew wrote:
Content-Type: multipart/signed; protocol="application/pgp-signature";
boundary="pgp-sign-Multipart_Thu_Mar__9_11:27:24_2000-1"; micalg=pgp-md5
(now that's a great way to make sure your messages
don't show up in some agents. maybe you didn't want
the bots to see your post? ;-)
> I'm building a program with an interactive loop in it, along with a
> trivial parser. What I'm doing is this:
> cmd = command_list[words[0]]
> cmd(words[1:])
> However, that means that all of the functions in the jumptable have to
> assume that they will always get one argument (a list). Is there a
> more natural way to express this?
maybe you could use apply?
cmd = command_list[words[0]]
apply(cmd, tuple(words[1:]))
(don't forget to add try-except to make sure your
program doesn't stop if user forgets an argument
or two...)
alternatively, you can use the cmd module:
http://www.python.org/doc/current/lib/module-cmd.html
here's an example (from the eff-bot guide; see below for
more info):
#
# cmd-example-1.py
import cmd
import string, sys
class CLI(cmd.Cmd):
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = '> '
def do_hello(self, arg):
print "hello again", arg, "!"
def help_hello(self):
print "syntax: hello [message]",
print "-- prints a hello message"
def do_quit(self, arg):
sys.exit(1)
def help_quit(self):
print "syntax: quit",
print "-- terminates the application"
# shortcuts
do_q = do_quit
#
# try it out
cli = CLI()
cli.cmdloop()
# end
and here's some output:
> help
Documented commands (type help <topic>):
========================================
hello quit
Undocumented commands:
======================
help q
> hello world
hello again world !
> q
hope this helps!
</F>
<!-- (the eff-bot guide to) the standard python library:
http://www.pythonware.com/people/fredrik/librarybook.htm
-->
More information about the Python-list
mailing list