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.
Can someone point me to where to read about this? I know it's do-able
since it's basically doing something like a callback would do.
Thanks for any pointers.
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
> On May 15, 10:53 am, PatrickMinnesota <PatrickMinnes...@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:
>
Or you could wrap your functions in functools.partial:
def foo(n):
return 'x'*n
>>> from functools import partial
>>> foo10 = partial(foo, 10)
>>> print foo10()
xxxxxxxxxx
HTH
--
Arnaud