如何在lambda列表中使用?

时间:2017-11-02 00:33:36

标签: python-3.x list loops for-loop lambda

这是我的代码:

a_list = [lambda x: x**n for n in range(1, 5)]
for q in a_list:
    print(q(3))

我想将3列为1到4的幂,但结果是:

27
27
27
27
你可以帮我解决一下吗?非常感谢你! (我使用python 3)

2 个答案:

答案 0 :(得分:2)

您希望将参数保留为lambda中的默认值:

[lambda x, *, n=n: x**n for n in range(1, 5)]

然后:

>>> for q in a:
    print(q(3))


3
9
27
81

使用functools模块:

from functools import partial
[partial((lambda n, x: x**n), n) for n in range(1, 5)]

请注意,在partial中,由于partial在第一个参数中传递,因此切换了变量的顺序。 (为了清楚起见,括号在lambda附近添加。)

答案 1 :(得分:0)

Rassar回答很好!

另一种方法是使用functools.partial来设置n

from functools import partial

a_list = [partial(lambda n, x: x**n, n) for n in range(1, 5)]
for q in a_list:
    print(q(3))

partial只取部分参数(此处为n)并将其应用于函数并返回已设置n的新函数。

请注意,为了做到这一点,我们需要n作为lambda的第一个参数!