Executing a list of functions

James Stroud jstroud at mbi.ucla.edu
Fri Mar 16 20:44:00 EDT 2007


HMS Surprise wrote:
> Seems to me that one should be able to put the names of several
> functions in a list and then have the list executed. But it seems the
> output of the functions is hidden, only their return value is visible.
> Is this because the list execution is another scope?
> 
> Thanx,
> 
> jh
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> def a():
>     print "this is a"
> 
> def b():
>     print "this is b"
> 
> lst = [a(), b()]
> 
> lst
> 

The "print" statement does nothing to return a value from the function, 
so the strings "this is *" will not be stored in your list. They will, 
however, be printed if you are some how observing your program output 
(e.g. running it in IDLE, or a command shell).

To save the "results" of the functions, you need to produce results, 
which means actually using "return" to return some value. Here is an 
example:


def a():
   print "this is a"
   return "return value from a"

def b():
   print "this is b"
   return "return value from b"

functions = [a, b]
results = [f() for f in functions]
print results


Here is the result of this example:


py> def a():
...   print "this is a"
...   return "return value from a"
...
py> def b():
...   print "this is b"
...   return "return value from b"
...
py> functions = [a, b]
py> results = [f() for f in functions]
this is a
this is b
py> print results
['return value from a', 'return value from b']


A fun, but unfortunately deprecated, way to do this is with the "apply" 
function in conjunction with the "map" function:


def a():
   print "this is a"
   return "return value from a"

def b():
   print "this is b"
   return "return value from b"

functions = [a, b]
results = map(apply, functions)
print results


Here is this example at work:


py> def a():
...   print "this is a"
...   return "return value from a"
...
py> def b():
...   print "this is b"
...   return "return value from b"
...
py> functions = [a, b]
py> results = map(apply, functions)
this is a
this is b
py> print results
['return value from a', 'return value from b']


James



More information about the Python-list mailing list