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

如何从传入带参函数的函数中返回值?遇TypeError报错

问题解决:TypeError: 'NoneType' object is not callable

错误原因

你当前的写法是先执行了runner函数,再把返回值传给计时函数:

time_elapsed = get_running_time(runner(x:int, y:int, z:int, return_values:list))

Python会优先计算括号里的runner(...),如果runner没有显式返回值,它的返回值就是None。而get_running_time期望接收一个可调用的函数,拿到None后调用fn()自然会报错。

解决方案

以下三种方法都可以解决问题,按需选择:

方法1:用lambda包装带参调用

把带参数的runner调用包装成无参的lambda函数,这样传给计时函数的是可调用对象:

time_elapsed = get_running_time(lambda: runner(x, y, z, return_values))

方法2:改造计时函数支持传参

直接修改get_running_time,让它能接收函数和对应的参数,使用更灵活:

import time
from typing import Callable, Any

def get_running_time(fn: Callable, *args, **kwargs):
    time_start = time.time()
    fn(*args, **kwargs)  # 传递所有位置参数和关键字参数
    return time.time() - time_start

# 调用示例
time_elapsed = get_running_time(runner, x, y, z, return_values=return_values)

方法3:用functools.partial绑定参数

如果需要复用绑定好参数的runner,可以用functools.partial:

from functools import partial

# 绑定参数到runner
bound_runner = partial(runner, x, y, z, return_values=return_values)
# 传入计时函数
time_elapsed = get_running_time(bound_runner)

补充说明

你用列表return_values按引用传递获取结果的方式完全没问题,不会对计时逻辑产生影响。

内容的提问来源于stack exchange,提问作者Tim Korelov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:33:59