从外部将Python函数传递给另一个函数

时间:2019-04-28 07:43:07

标签: python

我有一个函数,可以根据我的数据计算特征。 这是它的虚拟样本

import numpy as np
val1=[1,2,3,4,5,6,7,8,9]
val2=[2,4,6,8,10,12,14,16]
data=[]
def feature_cal(val):
    val=np.array(val)
    value=val*2
    data.append(np.mean(value))
feature_cal(val1)
feature_cal(val2)

我要在函数feature_cal中定义函数np.mean()。
伪代码

def feature_cal(val,method):
    val=np.array(val)
    value=val*2
    data.append(method(value))
feature_cal(val1,method=np.mean())
feature_cal(val2,method=np.mean())

这将帮助我在不更改原始功能的情况下计算其他功能,例如np.std(),np.var()

3 个答案:

答案 0 :(得分:3)

要传递该功能,您需要删除np.mean之后的括号:

import numpy as np

def feature_cal(val, method):
    val = np.array(val)
    value = val*2
    data.append(method(value))

feature_cal(val1, method=np.mean)
feature_cal(val2, method=np.mean)

编辑

如果您需要将参数传递给np.mean,则可以使用functools.partial

import numpy as np
import functools

def feature_cal(val, method):
    val = np.array(val)
    value = val*2
    data.append(method(value))

bound_function = functools.partial(np.mean, axis=1)
feature_cal(val1, method=bound_function)
feature_cal(val2, method=bound_function)

答案 1 :(得分:0)

如果我正确地理解了您,则您需要传递可调用的函数,而不是像现在那样传递函数调用的结果。所以这行

feature_cal(val1,method=np.mean())

应该阅读

feature_cal(val1,method=np.mean)

答案 2 :(得分:0)

您只需输入方法的名称(不带括号)并读取要调用的函数(带括号),就可以简单地将方法作为参数插入函数中

    def feature_cal(val,method):
        val=np.array(val)
        value=val*2
        data.append(method(value))



   feature_cal(val1,method=np.mean)