为何将函数作为参数传入另一函数后返回结果为None?
Python函数输出None的原因解析
场景1:无显式返回值导致输出None
先看这段代码:
def run_my_func(runner, *args, **kwargs): runner(*args) def my_func(name): return name out = run_my_func(my_func, "my name is john", kwargs=None) print(out)
运行后输出None,原因是什么?
场景2:打印内容后仍输出None
修改my_func后的代码:
def run_my_func(runner, *args, **kwargs): runner(*args) def my_func(name): print(name) return name out = run_my_func(my_func, "my name is john", kwargs=None) print(out)
运行输出:
my name is john None
这个现象的原因又是什么?
核心原因:run_my_func未返回调用结果
这两个场景的问题根源完全一致:
- Python中,函数如果没有显式的
return语句,默认会返回None。 run_my_func内部只是执行了runner(*args),也就是调用了传入的my_func,但并没有把my_func的返回值通过return传递出去。所以不管my_func有没有返回值,run_my_func本身的返回值都是None,变量out接收的就是这个None,最后print(out)自然输出None。
补充说明场景2的打印逻辑
场景2里my_func中的print(name)会直接向控制台输出字符串,这是独立的打印操作,和函数返回值没有关系。my_func虽然return name,但这个返回值被run_my_func忽略了,没有传递给out,所以最终print(out)还是输出None。
另外提个小细节:调用run_my_func时的kwargs=None是作为位置参数被*args收集的,这会导致my_func被传入两个参数("my name is john"和None),正常运行会触发参数不匹配的报错,推测是示例笔误,但这不影响核心的返回值问题。
内容的提问来源于stack exchange,提问作者himmip
相关产品推荐
相关产品推荐

