如何将函数作为参数传递给另一个函数?

时间:2017-06-22 13:25:28

标签: python-3.x function pandas

我在pandas数据帧上做了很多操作。例如,在列和return the column names in a new column内找到最大 min 平均。现在我尝试将这些东西包装成一个函数,并在此函数中使用max()和/或min()作为参数。

下面是一个片段,以非常简单的方式描述了我尝试做的事情。在其当前状态下,它还返回所需输出的描述。该片段没有所需的功能和灵活性。

设置:

# Sample dataframe
df = pd.DataFrame({'col_A':[1,20,6,1,3]})

def findValue(function, df, colname):

    print(function) # just a placeholder
    df[colname] = df.max()[0]

    return df

df2 = findValue(function='max', df=df, colname='col_B')
print(df)

输出1:

   col_A  col_B
0      1     20
1     20     20
2      6     20
3      1     20
4      3     20

天真的尝试:

# Sample dataframe
df = pd.DataFrame({'col_A':[1,20,6,1,3]})

# The function I would like to use in another function is max()

# My function 
def findValue(function, df, colname):
    df[colname] = df.function()[0]

    return df

df2 = findValue(function=max(), df=df , colname='col_B')
print(df)

输出2:

Traceback (most recent call last):

  File "<ipython-input-7-85964ff29e69>", line 1, in <module>
    df2 = findValue(function=max(), df=df , colname='col_B')

TypeError: max expected 1 arguments, got 0

如何更改上述代码段,以便我可以将function = max()更改为function = min()findValue()参数中的任何其他功能?或者甚至定义一个以类似方式使用的函数列表?

感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

你非常非常接近。你几乎需要在传递函数时删除parens。这是一个简化的示例,循环遍历函数名称列表,并且似乎可以执行您想要的操作:

def findValue(func, x, y):
    return func(x, y)

for calc in (max, min):
    result = findValue(func=calc, x=1, y=10)
    print(result)

输出:

10
1