Passing functions around and executing

alex23 wuwei23 at gmail.com
Wed May 14 22:56:15 EDT 2008


On May 15, 10:53 am, PatrickMinnesota <PatrickMinnes... at gmail.com>
wrote:
> I have a bunch of functions.  I want to put them in a list.  Then I
> want to pass that list into another function which does some setup and
> then loops through the list of passed in functions and executes them.
> Some of them need arguments passed in too.

Hey Patrick,

Is something like the following helpful?

>>> def fn1(): print 'fn1'
>>> def fn2(): print 'fn2'
>>> fn_list = [fn1, fn2]
>>> def process(fn_seq):
...     # do set up here
...     for fn in fn_list:
...         fn()

>>> process(fn_list)
fn1
fn2

The easiest way to extend this for optional argument passing would be
to have each function accept keyword arguments, and then to pass a
dictionary of arguments in to each:

>>> def fn1(**kwargs): print 'fn1'
>>> def fn2(**kwargs): print 'fn2: x=%(x)s' % kwargs
>>> fn_list = [fn1, fn2]
>>> def process(fn_seq):
...     x = 'hello'
...     for fn in fn_list:
...         fn(**locals())

>>> process(fn_list)
fn1
fn2: x=hello

You could replace 'process' with a list comprehension:

>>> args = dict(x='hello again')
>>> results = [f(**args) for f in fn_list]
fn1
fn2: x=hello again

Or use 'map':

>>> process = lambda f: f(**args)
>>> results = map(process, fn_list)
fn1
fn2: x=hello again

Sorry, I'm a little bored.

- alex23



More information about the Python-list mailing list