如何 return 来自高阶函数的值?
How do I return a value from a higher-order function?
伙计们,我怎样才能调用 make_repeater(square, 0)(5) return 5 而不是 25?我猜我需要更改行 "function_successor = h" 因为那时我只是得到 square(5) 但不确定我需要将其更改为...
square = lambda x: x * x
def compose1(h, g):
"""Return a function f, such that f(x) = h(g(x))."""
def f(x):
return h(g(x))
return f
def make_repeater(h, n):
iterations = 1
function_successor = h
while iterations < n:
function_successor = compose1(h, function_successor)
iterations += 1
return function_successor
它需要满足一系列其他要求,例如:
make_repeater(平方, 2)(5) = 平方(平方(5)) = 625
make_repeater(方形, 4)(5) = 方形(方形(方形(方形(5)))) = 152587890625
为此,您必须使用身份函数 (f(x) = x
) 作为 function_successor
的初始值:
def compose1(h, g):
"""Return a function f, such that f(x) = h(g(x))."""
def f(x):
return h(g(x))
return f
IDENTITY_FUNCTION = lambda x: x
def make_repeater(function, n):
function_successor = IDENTITY_FUNCTION
# simplified loop
for i in range(n):
function_successor = compose1(function, function_successor)
return function_successor
if __name__ == "__main__":
square = lambda x: x * x
print(make_repeater(square, 0)(5))
print(make_repeater(square, 2)(5))
print(make_repeater(square, 4)(5))
输出为
5
625
152587890625
虽然恒等函数(不做任何有用的事情)始终是组合函数的一部分,但对于性能而言,这并不是最优的,因此优化版本如下所示:
def make_repeater(function, n):
if n <= 0:
return IDENTITY_FUNCTION
function_successor = function
for i in range(n - 1):
function_successor = compose1(function, function_successor)
return function_successor
伙计们,我怎样才能调用 make_repeater(square, 0)(5) return 5 而不是 25?我猜我需要更改行 "function_successor = h" 因为那时我只是得到 square(5) 但不确定我需要将其更改为...
square = lambda x: x * x
def compose1(h, g):
"""Return a function f, such that f(x) = h(g(x))."""
def f(x):
return h(g(x))
return f
def make_repeater(h, n):
iterations = 1
function_successor = h
while iterations < n:
function_successor = compose1(h, function_successor)
iterations += 1
return function_successor
它需要满足一系列其他要求,例如:
make_repeater(平方, 2)(5) = 平方(平方(5)) = 625
make_repeater(方形, 4)(5) = 方形(方形(方形(方形(5)))) = 152587890625
为此,您必须使用身份函数 (f(x) = x
) 作为 function_successor
的初始值:
def compose1(h, g):
"""Return a function f, such that f(x) = h(g(x))."""
def f(x):
return h(g(x))
return f
IDENTITY_FUNCTION = lambda x: x
def make_repeater(function, n):
function_successor = IDENTITY_FUNCTION
# simplified loop
for i in range(n):
function_successor = compose1(function, function_successor)
return function_successor
if __name__ == "__main__":
square = lambda x: x * x
print(make_repeater(square, 0)(5))
print(make_repeater(square, 2)(5))
print(make_repeater(square, 4)(5))
输出为
5
625
152587890625
虽然恒等函数(不做任何有用的事情)始终是组合函数的一部分,但对于性能而言,这并不是最优的,因此优化版本如下所示:
def make_repeater(function, n):
if n <= 0:
return IDENTITY_FUNCTION
function_successor = function
for i in range(n - 1):
function_successor = compose1(function, function_successor)
return function_successor