Python递归函数do_n无法将传入的目标函数调用指定n次问题
问题原因分析
你所说的「网上查到的正确写法和你的代码一致」属于误判,你的代码存在两处核心逻辑错误:
- 传入
do_n的第一个参数不是函数对象。你写的print_once('Bob')会立即执行该函数,将返回值None传递给func参数,而非传递print_once函数本身,因此do_n内部根本无法调用目标函数。 do_n函数内部逻辑错误。你硬编码调用了print_once(s),既没有使用传入的func参数,也没有定义变量s,运行时还会触发变量未定义的报错。
修正方案
如果要让do_n支持调用带参数的任意函数,可以通过可变参数接收目标函数的入参,修正后的代码如下:
def print_once(s): print(s) def do_n(func, n, *args, **kwargs): if n <= 0: return # 调用传入的函数对象,透传参数 func(*args, **kwargs) do_n(func, n - 1, *args, **kwargs) # 调用时第一个参数传函数对象(不加括号),后续依次传调用次数、函数入参 do_n(print_once, 3, 'Bob')
运行上述代码会连续打印3次Bob,符合题目要求。
内容的提问来源于stack exchange,提问作者user16588178
相关产品推荐
相关产品推荐

