[Tutor] Using a dictionary to map functions

Colby Christensen colbychristensen at hotmail.com
Tue Apr 26 10:44:10 EDT 2016


Thank you! This is what I was hoping to accomplish. 

> To: tutor at python.org
> From: __peter__ at web.de
> Date: Tue, 26 Apr 2016 14:13:56 +0200
> Subject: Re: [Tutor] Using a dictionary to map functions
> 
> Colby Christensen wrote:
> 
> > templist = []
> > pt_table = {}
> > cmd_table = {5:"store_point", 19: "line_line_int"}
> 
> As Alan says, the values should be functions rather than function names.
> You could use string keys to save both the re.search() check and the 
> conversion to integer.
> 
> > count = 0
> > 
> > for line in infile:
> >     #print line
> >     line = line.rstrip()
> >     if re.search('^[0-9]+', line):
> >         a = line.split()
> >         templist.append(a)
> > 
> > for line in templist:
> >     #use dictionary to call and pass arguments to function
> 
> You could put parsing and evaluation into the same loop, and avoid the 
> temporary list:
> 
> cmd_table = {"5": store_point, ...}
> for line in infile:
>     args = line.split()
>     cmd = args.pop(0)  # remove the first item from args
>     if cmd in cmd_table:
> 	func = cmd_table[cmd]
>          func(*args)  # see below
>     else:
>         # optional, but may help with debugging
>         print("Command {!r} not recognized. "
>               "Skipping line {!r}.".format(cmd, line), file=sys.stderr)
> 
> 
> Given a list 'args' with N items the expression
> 
> func(*args)
> 
> is equivalent to
> 
> func(args[0], args[1], ..., args[N-1])
> 
> e. g.
> 
> foo = ["one", "two"]
> bar(*foo)
> 
> passes the same arguments as
> 
> bar("one", "two")
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
 		 	   		  


More information about the Tutor mailing list