Passing functions around and executing

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • PatrickMinnesota

    Passing functions around and executing

    I've been reading the docs and looking for an answer and seem stuck.
    I'm either not looking in the right places or not understanding what
    I'm reading.

    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.
  • alex23

    #2
    Re: Passing functions around and executing

    On May 15, 10:53 am, PatrickMinnesot a <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_li st)
    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_li st)
    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

    Comment

    • Arnaud Delobelle

      #3
      Re: Passing functions around and executing

      alex23 <wuwei23@gmail. comwrites:
      On May 15, 10:53 am, PatrickMinnesot a <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_l ist)
      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.parti al:

      def foo(n):
      return 'x'*n
      >>from functools import partial
      >>foo10 = partial(foo, 10)
      >>print foo10()
      xxxxxxxxxx

      HTH

      --
      Arnaud

      Comment

      Working...