目标是将函数和数字作为参数传递给另一个函数,然后递归调用传递的函数n次。我实现了这两种方式。此版本按预期工作,打印Hello World
3次:
def do_n(fx, n):
if n <= 0:
return
else:
print(fx)
do_n(fx, n-1)
def return_greeting():
return "Hello World"
do_n(return_greeting(), 3)
此版本不起作用。它仅打印Hello World
一次,然后在第一次通过后似乎失去了被调用函数:
def do_n(fx, n):
if n <= 0:
return
else:
fx
do_n(fx, n-1)
def print_greeting():
print("Hello World")
do_n(print_greeting(), 3)
有人可以解释为什么第二个版本不会导致print_greeting
被调用3次并将Hello World
打印3次到屏幕上吗?
答案 0 :(得分:2)
第二个版本没有调用print_greeting
三次 - 实际上,两个版本都没有。
您只需在每个代码段的最后一行调用print_greeting
一次。在该行中,您调用它,并返回字符串,您只需将字符串传递到do_n
函数。
您可以对第二个代码段进行两项更改,以使其按照您认为应该执行的操作进行:
首先,不要在最后一行调用print_greeting
。它应该是这样的:
do_n(print_greeting, 3)
这样,您将实际函数print_greeting
传递给do_n函数。
其次,调用传递的函数(现在称为fx
),如下所示:
fx()
这里的括号表示&#34;调用此函数&#34;。
整个代码段应如下所示:
def do_n(fx, n):
if n <= 0:
return
else:
fx()
do_n(fx, n-1)
def print_greeting():
print("Hello World")
do_n(print_greeting, 3)
答案 1 :(得分:1)
声明fx
没有做任何事情。我想你想说fx()
来实际调用这个函数。
答案 2 :(得分:0)
在第一个版本中,您将Hello World
字符串传递给do_n函数并打印n次,这就是为什么它只打印n次(实际上您没有调用该函数)。
在第二个版本中,你有字符串,但你只是声明它。如果你想真正调用这个函数,你必须改变你的代码:
def do_n(fx, n):
if n <= 0:
return
else:
fx()
do_n(fx, n-1)
def return_greeting():
print "Hello World"
do_n(return_greeting, 3)