<分区>
我试图实现这样的目标
list1 = [lambda x: x+0, lambda x: x+1]
通过这样做
list2 = [lambda x: x+n for n in range(2)]
但是没用! (为什么不?) 如何以编程方式创建函数列表?
<分区>
我试图实现这样的目标
list1 = [lambda x: x+0, lambda x: x+1]
通过这样做
list2 = [lambda x: x+n for n in range(2)]
但是没用! (为什么不?) 如何以编程方式创建函数列表?
最佳答案
n
由 for 表达式重新赋值,因此在 for 表达式完成后,两者都会看到 n
的值为 1。
在没有列表表达式的情况下可以看到此问题的更多典型示例:
list3 = []
for n in range(2):
def f(x):
return x + n
list3.append(f)
这里所有创建的函数对象都将引用相同的变量 n
并且它会被赋值为 1 并且两个函数对象都将作为 lambda x: x + 1
.
您可以通过为每个创建的函数创建一个带有变量的附加范围来处理它:
a = [(lambda n: lambda x: x+n)(n) for n in range(2)]
关于python - 如何在python中制作函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172312/