Given a string - execute a function by the same name

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Tue Apr 29 05:03:54 EDT 2008


python at bdurham.com a écrit :
> I'm parsing a simple file and given a line's keyword, would like to call
> the equivalently named function.
> 
> There are 3 ways I can think to do this (other than a long if/elif
> construct):
> 
> 1. eval() 
> 
> 2. Convert my functions to methods and use getattr( myClass, "method" )
> 
> 3. Place all my functions in dictionary and lookup the function to be
> called
> 

4. Place all your functions in a module and use getattr(the_module, "func")

5. use globals().get("func")

 > Any suggestions on the "best" way to do this?

#1 is the worst possible solution, and #2 doesn't make sens if you don't 
need methods.

#4 is simple but can be problematic since these functions are not 
necessarily related enough to make for a module with hi cohesion and low 
coupling.

#5 is the simplest solution, but can be dangerous, since just any 
function in the global namespace (which includes the builtins...) can be 
called.

#3 is a bit heaviest to setup and maintain, but much more secure since 
you explicitely choose the availables functions.

Depending on the context (ie: where this 'simple file' comes from), I'd 
choose #3 or #5.

My 2 cents...



More information about the Python-list mailing list