Python:使用变量作为函数名

时间:2016-05-23 16:09:15

标签: python numpy pandas

我的目标是在这个语句中创建一个函数包装器:

import pandas as pd
import numpy as np
MonthNumber = np.array([1,1,2,4,5,6,5])
Data = np.array([1.1,3,.52,34,15,45,34])
Data2 = Data * 1.1
Data3 = Data * 2 
df = pd.DataFrame({'Month':MonthNumber, 'Data':Data})
Summary = pd.pivot_table(df,index=['Month'],values='Data'],aggfunc=[np.sum,np.var])

以便包装函数看起来像:

def summarywrapper(MonthNumber,Data,**kwargs):
   df = pd.DataFrame({'Month':MonthNumber, 'Data':Data})
   Summary = pd.pivot_table(df,index=['Month'],values='Data'],aggfunc=[kwar1,kwarg2,etc])
   return Summary

** kwargs会包含任意数量的参数,例如我想提供的mean,len,variance

此外,我希望能够提供任意数量的数组,如Data2,Data3,而不仅仅是两个数组,如示例所示。

如何实现向“SummaryFunction”提供可变数量的数组以及我想要计算的可变数量的参数。

1 个答案:

答案 0 :(得分:2)

目前还不清楚你的输入是什么,但Python函数是first-class objects,可以作为函数参数传递。

使用* args的示例实现可能如下所示:

def summarywrapper(MonthNumber, Data, *args):
   df = pd.DataFrame({'Month':MonthNumber, 'Data':Data})
   Summary = pd.pivot_table(df,index=['Month'],values='Data'],aggfunc=args)
   return Summary

使用样本:

summarywrapper(monthNumber, data, np.sum, np.var)

此处,函数本身作为variadic arguments传递。