将函数列表映射到python中的参数列表



我有一个简单的例子:

import numpy as np
func_dict1 = {0: np.sin, 1: np.cos, 2: np.tan}
out = map(func_dict1.get, np.array([0, 2, 0]))

在这里,我根据它们的字典键挑选出三个函数。现在我想向每个函数传递唯一的参数,如下所示:

[f(x) for f,x in zip(out, [3,1,2])]

其呈现输出:

[0.1411200080598672, 1.557407724654902, 0.9092974268256817]

但是我如何使用map做到这一点呢?

我原以为这会奏效,但事实并非如此:

map(out, [3,1,2])

我哪里错了?与列表理解相比,使用map有什么好处吗?我之前认为速度更快,但我承认自己不是这方面的专家。

map被设计为采用单个函数并将其应用于可迭代中的每个项。您正在将不同的函数应用于不同的项。我认为列表理解是一种优雅的方式

警告:您可能不想使用map,这个答案可能会让您感到困惑,而不是帮助;(。

然而,正如您所问的,如何使map做到这一点,以及它是python,让我们接受挑战:实现您想要的目标的一种方法是将out封装在一个可调用的对象中(因此行为类似于函数(,并且在每次调用时也会前进到next函数。例如:

# yours
import numpy as np
func_dict1 = {0: np.sin, 1: np.cos, 2: np.tan}
out = map(func_dict1.get, np.array([0, 2, 0]))
# extend like this
class FuncIterCaller:
def __init__(self, funcs):
self.funcs = funcs
def __call__(self, *args, **kwds):
return next(self.funcs)(*args, **kwds)
res = map(FuncIterCaller(out), [3,1,2])
# to see what's inside:
print(list(res))

最新更新