如何将函数名列表作为参数传递?

3
如何在Python中将函数名用作参数?例如:
def do_something_with(func_name, arg):
    return func_name(arg)

“func_name”可能是“mean”,“std”,“sort”等。

例如:

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] - Tadhg McDonald-Jensen
2
可能是Python-将一个函数传递到另一个函数中的重复问题(尽管实际问题的大部分内容都不相关,但根本问题和答案是有效的)。 - Tadhg McDonald-Jensen
2个回答

10

如评论所建议,将函数对象作为列表传递给您的函数并调用它们。这不仅适用于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))。

7
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

f(np) here np stands for classname which contains the methods mean and std - Kiran Kumar Kotari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接