python 高阶函数:如何一步步阅读代码?
python higher order functions: how do i read the code step by step?
我目前正在尝试解释代码,但即使我使用 python 导师,我似乎也无法想象它。
def two(f):
return lambda x: f(f(x))
def three(f):
return lambda x: f(f(f(x)))
print(three(two(lambda x: x+5))(2))
print(three(two)(lambda x: x+5)(2))
对于第一个打印输出,我是这样解释的:
two(two(two(x+5))) = (x + 5 + 5) + (5 + 5) + (5 + 5) = 32
我的理解正确吗?
此外,我真的不知道如何解释第二个打印输出。
two(f)
returns 应用 f
两次的函数,three(f)
returns 应用 f
三次的函数。
如果说f
是一个加5的函数,那么three(two(f))
就是一个6次加5的函数(3 * 2 = 6)。 three(two(f))(2) == 32
,所以你答对了,但我觉得你答错了。
然而,three(two)
是一个应用了 3 次 two
的函数,所以 three(two)(f) == two(two(two(f)))
。 two(f)
两次加 5。 two(two(f))
加 5 四次。 two(two(two(f))))
将 5 加八次,所以 three(two)(f)(2)
是 2 + 5 * 8 = 42。
这些函数实际上是计算发展中非常重要的一部分。它们被称为 Church numerals,这个问题演示了如何用它们进行乘法和求幂。
在第一种情况下,two()
生成一个调用您的 x+5
两次的函数,three()
生成一个将调用第一个函数三次的函数。这意味着您的 lambda 被调用三次两次 = 六次。
在第二种情况下,three()
函数将调用two()
函数三次,所以结果是:two(two(two(f)))(x)
,这意味着你的lambda被调用了2 * 2 * 2 == 8次,结果为42.
我目前正在尝试解释代码,但即使我使用 python 导师,我似乎也无法想象它。
def two(f):
return lambda x: f(f(x))
def three(f):
return lambda x: f(f(f(x)))
print(three(two(lambda x: x+5))(2))
print(three(two)(lambda x: x+5)(2))
对于第一个打印输出,我是这样解释的:
two(two(two(x+5))) = (x + 5 + 5) + (5 + 5) + (5 + 5) = 32
我的理解正确吗?
此外,我真的不知道如何解释第二个打印输出。
two(f)
returns 应用 f
两次的函数,three(f)
returns 应用 f
三次的函数。
如果说f
是一个加5的函数,那么three(two(f))
就是一个6次加5的函数(3 * 2 = 6)。 three(two(f))(2) == 32
,所以你答对了,但我觉得你答错了。
three(two)
是一个应用了 3 次 two
的函数,所以 three(two)(f) == two(two(two(f)))
。 two(f)
两次加 5。 two(two(f))
加 5 四次。 two(two(two(f))))
将 5 加八次,所以 three(two)(f)(2)
是 2 + 5 * 8 = 42。
这些函数实际上是计算发展中非常重要的一部分。它们被称为 Church numerals,这个问题演示了如何用它们进行乘法和求幂。
在第一种情况下,two()
生成一个调用您的 x+5
两次的函数,three()
生成一个将调用第一个函数三次的函数。这意味着您的 lambda 被调用三次两次 = 六次。
在第二种情况下,three()
函数将调用two()
函数三次,所以结果是:two(two(two(f)))(x)
,这意味着你的lambda被调用了2 * 2 * 2 == 8次,结果为42.