Я не думаю, что есть способ pythonic ™ решить вопрос. Но в моем коде это довольно распространенная ситуация, поэтому я написал свою собственную функцию для этого:
def applyfs(funcs, args):
"""
Applies several functions to single set of arguments. This function takes
a list of functions, applies each to given arguments, and returns the list
of obtained results. For example:
>>> from operator import add, sub, mul
>>> list(applyfs([add, sub, mul], (10, 2)))
[12, 8, 20]
:param funcs: List of functions.
:param args: List or tuple of arguments to apply to each function.
:return: List of results, returned by each of `funcs`.
"""
return map(lambda f: f(*args), funcs)
В вашем случае я хотел бы использовать его следующим образом:
applyfs([mean, std, var, fxn4 ...], mylist)
Обратите внимание, что вы на самом деле не нужно использовать функции имена (как вам нужно было бы сделать, например, PHP4), в функции Python сам является вызываемым объектом и может быть сохранен в списке.
EDIT:
Или, возможно, было бы более вещий использовать список понимание вместо map
:
results = [f(mylist) for f in [mean, std, var, fxn4 ...]]
отличный ответ, при поддержке. В случае, если необходимо было проверить, что указанное имя относится к вызываемому, добавьте 'if hasattr (func, '__call __')' к пониманию списка (используйте 'callable (func)' на python 3) – Pynchia