2017-03-02 10 views
1

Pythonで関数名をパラメータとして使う方法は?たとえば :関数名のリストをパラメータとして渡すには?

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

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

そしてもちろん、結果の: 'FUNC_NAMEは' '平均'、 'STD'、 'ソート' など例えば

かもしれません

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

私の配列 '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

それは面白いです!ありがとう! –

関連する問題