HMS said:
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?
def a():
print "this is a"
def b():
print "this is b"
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