Building a function call?

Robert Kern rkern at ucsd.edu
Wed Jul 13 09:16:54 EDT 2005


Duncan Booth wrote:
> 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)

Ick! Please:
getattr(otherModule, aString)(*aTuple)

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter




More information about the Python-list mailing list