Building a function call?
Duncan Booth
duncan.booth at invalid.invalid
Wed Jul 13 08:56:26 EDT 2005
Francois De Serres wrote:
> Having a string: "dothat"
> and a tuple: (x, y)
> 1. What's the best way to build a function call like: dothat(x,y)?
>
> Assuming dothat is def'd in the same module,
> 2. is: eval("dothat(x,y)", None, (('x', 100), ('y', 200)))
> the right way to have it executed?
>
> If dothat is def'd in another module:
> 3. what would be the right way to initialize the globals to pass to
> eval ?
>
No, none of this is a good place to use eval.
aString = "dothat"
atuple = (x, y)
If aString is the name of a function in the current module:
globals()[aString](*aTuple)
If aString is a function in another module:
import otherModule
vars(otherModule)[aString](*aTuple)
and if you don't know the name of the module in advance:
otherModule = __import__(nameOfOtherModule)
vars(otherModule)[aString](*aTuple)
Better still, collect all the functions you expect to be callable in this
way together in a dictionary and then you can be sure that you only call
something you intended to be callable.
More information about the Python-list
mailing list