这是我的代码:
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)
答案 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的第一个参数!