Håkan Persson wrote:

Hi.

I am trying to "convert" a string into a function pointer.
Suppose I have the following:

from a import a
from b import b
from c import c

funcString = GetFunctionAsString()

and funcString is a string that contains either "a", "b" or "c".
How can I simply call the correct function?
I have tried using getattr() but I don't know what the first (object) argument should be in this case.


Thanks,
Håkan Persson


Well, one really horrible way would be

  getattr(sys.modules['__main__'], funcString)

and, of course, if you were going to use it a lot you could optimize slightly with

  this = sys.modules['__main__']

followed later by

  this = getattr(this, funcString)

Overall, however, it might be better to set uip a mapping for the functions you need to be accessible. This has the further merits that

  a) You can heve different, and/or multiple names for a function
  b) You can trap errors more easily
  c) erm, I forgot the third advantage, consider this the Spanish
     Inquisition in reverse :-)

So:

funcMap = {
  "a": a,
  "A": a,
  "b": b,
  "exoticName": c }

  ...

  funcString = GetFunctionAsString()
  try:
    f = funcMap(funcString)
  except KeyError:
    print "No such function"
    raise SomethingElse
  result = f(args)

regards
 Steve
--
Meet the Python developers and your c.l.py favorites March 23-25
Come to PyCon DC 2005                      http://www.pycon.org/
Steve Holden                           http://www.holdenweb.com/
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to