如何解决Python递归函数evenlis执行后输出None的问题?
解决Python递归函数打印偶数后输出None的问题
问题原因
你代码最后一行用了print(evenlis(arr)),但evenlis函数没有定义返回值,Python里函数默认返回None,所以外层的print会把这个默认返回值也输出出来,这就是多余None的来源。
解决方案
有两种简单的处理方式:
方式一:直接调用函数,不用print包裹
因为evenlis函数内部已经通过print语句输出了偶数,不需要再用外层的print去输出它的返回值。修改最后一行代码即可:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def evenlis(x, n = 0): if n == len(x): return if x[n] % 2 == 0: print(x[n], end = " ") evenlis(x, n + 1) evenlis(arr) # 去掉外层的print
执行后只会打印数组里的偶数,不会输出None,后续代码也能正常运行。
方式二:让函数返回结果字符串,再打印
如果需要更灵活处理结果(比如后续要对偶数做其他操作),可以修改函数,让它收集所有偶数并返回拼接后的字符串,再用print输出:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def evenlis(x, n = 0, result = ""): if n == len(x): return result.strip() # 移除末尾多余的空格 if x[n] % 2 == 0: result += f"{x[n]} " return evenlis(x, n + 1, result) print(evenlis(arr))
这种方式下函数返回整理好的偶数字符串,print输出的就是这个字符串,不会出现None。
补充说明
你之前用exit()会终止整个程序,换成return是正确的选择——return只会结束当前的函数递归调用,不会影响后续代码的执行,这也是解决问题的前提。
内容的提问来源于stack exchange,提问作者Mihai Creciun
相关产品推荐
相关产品推荐

