You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将函数作为参数传入另一函数后返回结果为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:07:34