Python嵌套的lambda表达式仍然混淆,无法理解。请解释以下示例

时间:2016-07-30 05:52:05

标签: python lambda

>>> test = lambda f: f(lambda x: x + 1)(0)
>>> z = lambda f: lambda x: x
>>> test(z)
0

>>> succ = lambda n: lambda f: lambda x: f(n(f)(x))
>>> _1 = succ(z)
>>> test(_1)
1

>>> _2 = succ(_1)
>>> test(_2)
2

>>> plus = lambda m: lambda n: lambda f: lambda x: m(f)(n(f)(x))
>>> _3 = plus(_1)(_2)
>>> test(_3)
3

>>> mult = lambda m: lambda n: lambda f: lambda x: m(n(f))(x)
>>> _6 = mult(_2)(_3)
>>> test(_6)
6

>>> _5 = plus(_2)(_3)
>>> _25 = mult(_5)(_5)
>>> _4 = plus(_2)(_2)
>>> _100 = mult(_25)(_4)
>>> test(_100)
100

1 个答案:

答案 0 :(得分:0)

首先避免使用相同名称的隐藏(本地)变量以避免额外的混淆(就好像你需要了!)

>>> test = lambda f: f(lambda x: x + 1)(0)
>>> z = lambda g: lambda y: y
>>> test(z)
0

逐步用变量值替换变量:

test(z) = z(lambda x: x + 1)(0)

现在z是一个返回身份函数lambda y: y的函数,无论传递什么参数(g没有出现在定义lambda的表达式中)。

test(z) = (lambda y: y)(0) = 0