2017-03-02 92 views
1

如何在Python中使用函數名稱作爲參數? 例如:如何傳遞函數名稱列表作爲參數?

def do_something_with(func_name, arg): 
    return func_name(arg) 

其中 'FUNC_NAME' 可能是 '平均', '性病', '排序' 等

例如:

import numpy as np 
func_list = ['mean', 'std'] 

for func in func_list: 
    x = np.random.random(10) 
    print do_something_with(func, x) 

當然結果和應該在我的數組'x'上成功應用'mean'和'std'。

+7

改爲傳遞函數列表。 'func_list = [np.mean,np.std]' –

+2

[Python-將函數傳遞給另一個函數]可能的重複(http://stackoverflow.com/questions/1349332/python-passing-a-function-into-另一種功能)(儘管大部分的實際問題是無關緊要的,根本問題和答案是有效的) –

回答

5

作爲評論中的建議,將列表中的函數對象傳遞給您的函數並調用它們。這不僅僅是numpy工作,但所有的Python功能:

import numpy as np 
func_list = [np.mean, np.std] 

for func in func_list: 
    x = np.random.random(10) 
    print func(x) 

確保函數調用的工作都以同樣的方式,即作爲x第一個參數。

以上是相當類似的功能重命名如何工作的:

import time 

another_sleep = time.sleep 
another_sleep(1) # Sleep for one second 

您創建一個函數對象(time.sleep),並將其分配給一個變量(another_sleep)。現在你可以用變量名稱(another_sleep(1))來調用它。

4

Tadhg McDonald-Jensen的解決方案是正確的,因爲函數是Python中的一等公民。另外,我還有一個想法:

from operator import methodcaller 

import numpy as np 


func_list = ['mean', 'std'] 
for func in func_list: 
    x = np.random.random(10) 
    f = methodcaller(func, x) 
    result = f(np) 
    print(result) 

對於某些情況,您可以使用operator.methodcaller

+1

這很有趣!謝謝! –

相關問題