[英]How do I use recursion to write a function that calls another function repeatedly in Python?
我正在尝试编写一个反复调用另一个函数的函数。 这是我到目前为止的内容:
def function1(n, function_object):
if n > 0:
function_object
function1(n-1, function_object)
def function2(x, word):
for i in range(x):
print word
y = 'pluto'
function1(3, function2(3, y))
这是我尝试运行它时得到的:
>>>
pluto
pluto
pluto
>>>
我以为它会打印“ pluto”九次,但似乎function2只执行一次。 如何在function1中重复执行它?
()
。 function1
传递的是function2
的返回值,您应该传递函数对象。 我在以下代码中将其替换为lambda。 (使调用一个匿名函数function2
,而不是调用function2
之前调用function1
) def function1(n, function_object):
if n > 0:
function_object() # <---- Added ()
function1(n-1, function_object)
def function2(x, word):
for i in range(x):
print word
y = 'pluto'
function1(3, lambda: function2(3, y)) # <---
在您的代码中,function1调用了自己以及另一个函数。 不必那么复杂。
另外,在最后一行中,您将function2(3, y)
作为参数传递-因为那里有parens ()
,因此调用 function2并获取结果,然后将结果传递给function1。 我不认为那是你的本意。
所以我修改了它。 根据您的要求,这里有一个函数(function1)调用N次(任意)函数N次,并将N的当前值与任意参数一起传递。
def function1(n, function_object, *args):
while n > 0:
function_object(n, *args)
n -= 1
def function2(n, x, word):
for i in range(x):
print "%s, %d, %d" % (word, n, i)
y = 'pluto'
function1(3, function2, 3, y)
输出:
pluto, 3, 0
pluto, 3, 1
pluto, 3, 2
pluto, 2, 0
pluto, 2, 1
pluto, 2, 2
pluto, 1, 0
pluto, 1, 1
pluto, 1, 2
执行此操作时:
function2(3, y)
该函数立即运行,其返回值(在这种情况下为None
)作为function_object
参数传递到function1
中。 在function1
,您尝试这样调用它:
function_object
但是实际上并没有这样称呼。 因此,在调用function1 之前 ,function2最终将被总共调用一次。
如果将它替换为function_object()
,它会调用它-但是会出现错误,因为function_object
为None
,这是不可调用的。 要传入function2
而不是None
,只是不要在外面调用它-而是需要这样做:
function1(3,function2)
这将使您出错,说function2需要接受两个参数,但是您没有给它任何参数 。 因此,下一步就是弄清楚如何将这些参数传递给它-这需要在调用它时发生。 但是function1
预计不带参数的函数..你可以通过编写另一个函数,它没有参数,并要求解决这个问题function2
你想要的两个参数,并将其传递到功能1。 所以看起来像这样:
def function1(n, function_object):
if n > 0:
function_object()
function1(n-1, function_object)
def function2(x, word):
for i in range(x):
print word
y = 'pluto'
def function3():
function2(3, y)
function1(3, function3)
如果只使用一次此功能3,并且没有一个合理的名称,则可以使用lambda创建一个执行相同功能的匿名函数:
def function1(n, function_object):
if n > 0:
function_object()
function1(n-1, function_object)
def function2(x, word):
for i in range(x):
print word
y = 'pluto'
function1(3, lambda: function2(3, y))
在这种情况下,Lambda是一个不错的选择,否则,您可以看看这篇文章,他们解释另外两种实现方法:将带有参数的函数传递给Python中的另一个函数?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.