名称“g”绑定到哪个对象?

时间:2015-05-18 07:17:54

标签: python python-3.x

以下作业取自here

  

Q5。通过调用reduce with compose1作为第一个参数,定义Homework 2中的重复函数。在下面的入门实现中只添加一个表达式:

def square(x):
    return x*x

def compose1(f, g):
    """Return a function of x that computes f(g(x))."""
    return lambda x: f(g(x))

from functools import reduce

def repeated(f, n):
    """Return the function that computes the nth application of f, for n>=1.

    f -- a function that takes one argument
    n -- a positive integer

    >>> repeated(square, 2)(5)
    625
    >>> repeated(square, 4)(5)
    152587890625
    """
    assert type(n) == int and n > 0, "Bad n"
    return reduce(compose1, "*** YOUR CODE HERE ***" )

要完成此作业,我想了解g绑定到什么内容? f绑定到square函数

1 个答案:

答案 0 :(得分:2)

首先,repeated(f, 4)应该返回什么?

在某个任意arg上调用时,将返回f(f(f(f(arg))))的函数。

因此,如果您想使用compose1进行构建,则需要返回compose1(compose1(compose1(f, f), f), f)compose1(f, compose1(f, compose1(f, f)))

现在,看看reduce做了什么,并找出每次传递给compose1的内容。显然,您的iterable参数必须以f本身开头或结尾。但是你还想要什么呢,以确保你得到两个可接受的结果之一?

同时,在每次调用compose1之外,除了最后一个,两个参数中的一个必须是repeated函数的f,而另一个是另一个调用的结果到compose1。 (最后一次,当然,他们都是f。)弄清楚哪些是f,哪个是g,以及你如何得到reduce为每个传递正确的值,你已经解决了问题。