该解决方案中的 lambda 函数实际上是如何工作的?
How do the lambda functions in this solution actually work?
我正在尝试理解涉及 lambda 函数的问题的解决方案,但我无法只理解其中的一部分。
问题陈述
seven(times(five())) # must return 35
four(plus(nine())) # must return 13
eight(minus(three())) # must return 5
six(divided_by(two())) # must return 3
要求:
- 从 0(“零”)到 9(“九”)的每个数字都必须有一个函数
- 以下每个数学运算都必须有一个函数:加、减、乘、除(Ruby和Python中的divided_by)
- 每次计算只包含一次操作和两个数字
- 最外函数代表左操作数,最内函数代表右操作数
- 除法应该是整数除法。例如,这应该是 return 2,而不是 2.666666...:[=41=]
解决方案
def zero(f = None): return 0 if not f else f(0)
def one(f = None): return 1 if not f else f(1)
def two(f = None): return 2 if not f else f(2)
def three(f = None): return 3 if not f else f(3)
def four(f = None): return 4 if not f else f(4)
def five(f = None): return 5 if not f else f(5)
def six(f = None): return 6 if not f else f(6)
def seven(f = None): return 7 if not f else f(7)
def eight(f = None): return 8 if not f else f(8)
def nine(f = None): return 9 if not f else f(9)
def plus(y): return lambda x: x+y
def minus(y): return lambda x: x-y
def times(y): return lambda x: x*y
def divided_by(y): return lambda x: x/y
我的问题
在def plus(y): return lambda x: x+y
中,两个参数是如何传递给这个函数的?我知道它与“闭包”有关,但我无法在 this 上下文中找到任何帮助我理解它的文档。
例如:three(plus(one()))
扩展为 return 3 if not plus() else plus(3)
。
然后,plus(3)
扩展为 return lambda x: x + 3
。 x 从哪里得到它的值?
In def plus(y): return lambda x: x+y
, how are both arguments passed to this function?
它没有——或者至少,plus()
没有将两个参数都传递给 lambda 函数。 plus(3)
returns lambda x: x + 3
-- 接受一个参数并将其参数递增 3 的函数。此过程称为 currying.
为了解决您的示例,three(plus(one()))
:
one()
returns 1
.
plus(one())
变为 plus(1)
和 returns lambda x: x + 1
.
three(plus(one())
变为 three(lambda x: x + 1)
。 three()
调用传入的 lambda 函数,参数为 3,returns 结果值。这给出了最终结果 4.
我正在尝试理解涉及 lambda 函数的问题的解决方案,但我无法只理解其中的一部分。
问题陈述
seven(times(five())) # must return 35
four(plus(nine())) # must return 13
eight(minus(three())) # must return 5
six(divided_by(two())) # must return 3
要求:
- 从 0(“零”)到 9(“九”)的每个数字都必须有一个函数
- 以下每个数学运算都必须有一个函数:加、减、乘、除(Ruby和Python中的divided_by)
- 每次计算只包含一次操作和两个数字
- 最外函数代表左操作数,最内函数代表右操作数
- 除法应该是整数除法。例如,这应该是 return 2,而不是 2.666666...:[=41=]
解决方案
def zero(f = None): return 0 if not f else f(0)
def one(f = None): return 1 if not f else f(1)
def two(f = None): return 2 if not f else f(2)
def three(f = None): return 3 if not f else f(3)
def four(f = None): return 4 if not f else f(4)
def five(f = None): return 5 if not f else f(5)
def six(f = None): return 6 if not f else f(6)
def seven(f = None): return 7 if not f else f(7)
def eight(f = None): return 8 if not f else f(8)
def nine(f = None): return 9 if not f else f(9)
def plus(y): return lambda x: x+y
def minus(y): return lambda x: x-y
def times(y): return lambda x: x*y
def divided_by(y): return lambda x: x/y
我的问题
在def plus(y): return lambda x: x+y
中,两个参数是如何传递给这个函数的?我知道它与“闭包”有关,但我无法在 this 上下文中找到任何帮助我理解它的文档。
例如:three(plus(one()))
扩展为 return 3 if not plus() else plus(3)
。
然后,plus(3)
扩展为 return lambda x: x + 3
。 x 从哪里得到它的值?
In
def plus(y): return lambda x: x+y
, how are both arguments passed to this function?
它没有——或者至少,plus()
没有将两个参数都传递给 lambda 函数。 plus(3)
returns lambda x: x + 3
-- 接受一个参数并将其参数递增 3 的函数。此过程称为 currying.
为了解决您的示例,three(plus(one()))
:
one()
returns1
.plus(one())
变为plus(1)
和 returnslambda x: x + 1
.three(plus(one())
变为three(lambda x: x + 1)
。three()
调用传入的 lambda 函数,参数为 3,returns 结果值。这给出了最终结果 4.