Skip to content

Problem 8 (200pts)

实现make_averaged,这是一个高阶函数,它接受一个函数original_function作为参数。

make_averaged的返回值是一个函数,它接受与original_function相同数量的参数。 当我们用参数调用这个返回的函数时,它将返回多次调用original_function的参数的平均值。

具体来说,这个函数应该总共调用original_function total_samples次,并返回这些调用结果的平均值。

重要: 要实现此函数,您需要使用Python的新语法。 我们想要编写一个接受任意数量参数的函数,然后使用这些参数调用另一个函数。 这样工作:

无需为函数列出所有形式参数,您可以使用*args,它代表传递给函数的所有arguments。 然后我们可以将这些*args传递给另一个函数,进而使用相同参数来调用该函数。 例如:

>>> def printed(f):
...     def print_and_return(*args):
...         result = f(*args)
...         print('Result:', result)
...         return result
...     return print_and_return
>>> printed_pow = printed(pow)
>>> printed_pow(2, 8)
Result: 256
256
>>> printed_abs = printed(abs)
>>> printed_abs(-10)
Result: 10
10

我们可以通过*args语法将任意数量的参数传递给print_and_return。 我们也可以在print_and_return函数内部使用*args来使用相同参数调用另一个函数。

在编写任何代码之前,请解锁测试以验证您对问题的理解:

python ok -q 08 -u

解锁完成后,开始实现您的解决方案。您可以使用以下命令检查正确性:

python ok -q 08

Solutions

def make_averaged(original_function, trials_count=1000):
    return lambda *args: sum(original_function(*args) for _ in range(trials_count)) / trials_count