我不認爲有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函數本身是可調用的對象,可以存儲在列表中。
編輯:
或者,也許,這將是更Python使用列表理解,而不是map
:
results = [f(mylist) for f in [mean, std, var, fxn4 ...]]
優秀的答案,upvoted。如果需要檢查提供的名稱是否指向一個可調用的add if'hasattr(func,'__call __')'到列表理解(在python 3上使用'callable(func)') – Pynchia