Python 将多个函数映射到单个值
我正在做一些python练习。我知道有更有效的方法来解决这个问题,但是,我正试图更好地理解这个问题的含义 Q:使用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) --------------------------
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)