Python 将多个函数映射到单个值

Python 将多个函数映射到单个值,python,python-3.x,Python,Python 3.x,我正在做一些python练习。我知道有更有效的方法来解决这个问题,但是,我正试图更好地理解这个问题的含义 Q:使用map和lambda将多个函数传递给单个值 这里需要注意的是,我没有将变量名指定为list。 以下是我尝试过的: import math mult_funcs = [math.sqrt, math.log] test_func = list(map(lambda x: x, mult_funcs)) test_func(2) --------------------------

我正在做一些python练习。我知道有更有效的方法来解决这个问题,但是,我正试图更好地理解这个问题的含义

Q:使用
map
lambda
将多个函数传递给单个值

这里需要注意的是,我没有将变量名指定为
list
。 以下是我尝试过的:

import math

mult_funcs = [math.sqrt, math.log]

test_func = list(map(lambda x: x, mult_funcs))
test_func(2)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-89-6561142477ba> in <module>
      1 test_func = list(map(lambda x: x, func_lst))
----> 2 test_func(2)

TypeError: 'list' object is not callable

如果要调用
test_func
,它必须是一个函数。因此,如果您需要从以下内容开始:

test_func = lambda x: ...
这样,您可以在该函数中使用
map
,而
map
将需要另一个lambda。比如:

import math

mult_funcs = [math.sqrt, math.log]

test_func = lambda x: list(map(lambda f: f(x), mult_funcs))
test_func(2)
# [1.4142135623730951, 0.6931471805599453]

它将捕获闭包中传入的数字,并在第二个lambda中对其应用函数。

您的第一个代码段不起作用,因为
lambda
操作末尾的
test\u func
是一个列表,您不能执行类似列表中的函数调用

与使用
lambda
相比,最具python风格的方法是迭代:

import math

mult_funcs = [math.sqrt, math.log]

arg = 2
test_func = [x(arg) for x in mult_funcs]
# or: test_func = list(map(lambda x: x(arg), mult_funcs))

print(test_func)

事实上,变量
test\u func
在这里不是函数,但您明白了。

在第一个变量中,您创建了一个列表(列表(…)调用所做的)并将其分配给
test\u func
。在下一行中,您尝试调用此列表。在第二种变体中,您可以将第二行中的
arg
替换为
4
或其他任何内容。第一行可以省略。这是有道理的,我很欣赏解决这个问题的替代方法。出于练习问题的精神,我被要求使用map和lambda.Hmm,为什么对
test_func
使用
lambda
,而不是
def
?@HeapOverflow,因为这是作业。但是我同意,一个
def
是有意义的。
import math

mult_funcs = [math.sqrt, math.log]

arg = 2
test_func = [x(arg) for x in mult_funcs]
# or: test_func = list(map(lambda x: x(arg), mult_funcs))

print(test_func)