我试图在Python 2.7中编写一个天真的curried函数,但看起来内部lambda无法访问父lambda范围。
为简单起见,我们来看看这个功能:
d3.selectAll
内部lambda的范围无法访问外部范围(Python无法识别add = lambda a: lambda b: a + b
)。
是否有方便的方法可以访问外部范围?
答案 0 :(得分:2)
这个例子在python 2.7.11
中似乎对我有用add = lambda a: lambda b: a + b
f = add(1)
print f(2)
3
print f(10)
11
但更复杂的例子可能会失败。 lambda函数存储对封闭范围中变量的引用,而不是它们的值。这可能有助于解决更复杂的问题:https://stackoverflow.com/a/938493/8131703