我想用list comprehension/for循环创建一个函数列表
def multiplier():
return [(lambda x: x*0),(lambda x: x*1),(lambda x: x*2),(lambda x: x*3)]
就这样
^{pr2}$将分别输出[0,2,4,6]和[0,3,6,9]
但是,当我试图这么做时:
def multiplier():
return [lambda x:i*x for i in range(4)]
或者
def multiplier():
result = []
for i in range(4):
result.append(lambda x:x*i)
return result
或者
def multiplier():
result = []
for i in range(4):
def m(x): return x*i
result.append(m)
return result
以下内容:
^{pr2}$将分别输出[6,6,6,6]和[9,9,9,9]。在
如何在不手动逐个键入的情况下创建此函数列表! 有什么解释吗?谢谢!在
对我来说,把“[”替换为“(”之类的)很管用
我认为这与列表是可变的而元组不是可变的这一事实有关。在
您需要提供
i
作为参数,以便从range
绑定到i
:输出:
^{pr2}$在您的例子中,
i
将始终是range
循环的最后一个值,因为函数在调用时会查找i
。提供i
as关键字实际上使创建的函数在创建时i
成为默认参数。在考虑在字典中使用
functools.partial
:相关问题 更多 >
编程相关推荐