我必须创建一个函数mega_calculator
,它接受两个输入:一个函数和次数,我应该重复它。该函数应该在我调用它时返回一个值。在父函数(mega_calculator)中,现在我必须创建第二个函数,它在创建它时通过给它参数mega_calculator
获取与父函数*args
相同数量的输入。我的问题是,如何访问第二个函数内的父函数参数?
我认为*args
是一个参数列表,因此如果我调用第一个和第二个值,我可以保存函数操作并将数量重复到变量上,以便稍后在第二个函数内使用,但这样做了不行。
我该怎么做?,任何帮助都会受到很大的喜爱和赞赏。我们必须有奇怪的功能设置,所以不幸的是我不能只做一个简单的while循环。
def mega_calculator(fn, repeat = 1000):
def helper(*args):
function = *args[0]
bob = *args[1]
while bob > 0:
total += function
return (total/repeat)
return helper()
`
答案 0 :(得分:5)
你误解了; args
捕获传递给helper()
的任何参数(尚未明确命名)但您不会将任何参数传递给该函数。
你改为直接调用它,没有任何参数。
但是,您无需在此处传递参数,因为fn
和repeat
可以从闭包中直接访问。
该作业很可能会要求您返回 helper
并使用这些参数调用fn
:
def mega_calculator(fn, repeat=1000):
def helper(*args):
total = 0
for _ in range(repeat):
total += fn(*args)
return total / repeat
return helper
现在mega_calculator()
返回一个新的函数对象,在调用该对象时,会在调用该函数时传递给fn
的任何参数。
一个小型演示:
>>> def mega_calculator(fn, repeat=1000):
... def helper(*args):
... total = 0
... for _ in range(repeat):
... total += fn(*args)
... return total / repeat
... return helper
...
>>> def add(a, b):
... return a + b
...
>>> repeated = mega_calculator(add, 10)
>>> repeated(5, 6)
11
add()
函数被调用了10次,但是因为帮助器将除以重复次数得到的总和,所以它仍然是11。