Passing functions around and executing

Discussion in 'Python' started by PatrickMinnesota, May 15, 2008.

  1. 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.
     
    PatrickMinnesota, May 15, 2008
    #1
    1. Advertising

  2. PatrickMinnesota

    alex23 Guest

    On May 15, 10:53 am, PatrickMinnesota <>
    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
     
    alex23, May 15, 2008
    #2
    1. Advertising

  3. alex23 <> writes:

    > On May 15, 10:53 am, PatrickMinnesota <>
    > 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
     
    Arnaud Delobelle, May 15, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Patrick Delifer
    Replies:
    0
    Views:
    3,409
    Patrick Delifer
    May 3, 2004
  2. Xiangliang Meng
    Replies:
    1
    Views:
    1,633
    Victor Bazarov
    Jun 21, 2004
  3. LeTubs
    Replies:
    2
    Views:
    368
    LeTubs
    May 2, 2004
  4. Piet
    Replies:
    0
    Views:
    567
  5. Network/Software Buyer
    Replies:
    0
    Views:
    431
    Network/Software Buyer
    May 23, 2010
Loading...

Share This Page