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