Python using getattr to call function with variable parameters

lcorral picture lcorral · Aug 2, 2012 · Viewed 26.7k times · Source

I'm using getattr to call different functions depending on a variable.

Im doing something like that:

getattr(foo, bar) ()

That works, calling functions like foo.bar()

My problem is that I have 'bar' functions and I want to call it with different parameters. For example:

def f1() :
  pass

def f2(param1) :
  pass

def f3(param1,param2) :
  pass

so 'bar' could be f1, f2, or f3

I tried this: assumming that params is a list which contains all parameters needed for the 'bar' function

getattr(foo, bar) (for p in params :)

I watching for a "clean" solution, with no needed to watch the length on the params variable

Answer

mgilson picture mgilson · Aug 2, 2012

You could try something like:

getattr(foo, bar)(*params)

This works if params is a list or a tuple. The elements from params will be unpacked in order:

params=(1, 2)
foo(*params)

is equivalent to:

params=(1, 2)
foo(params[0], params[1])

If there are keyword arguments, you can do that too.

getattr(foo, bar)(*params, **keyword_params)

where keyword_params is a dictionary.

Also, This answer is really independent of getattr. It will work for any function/method.