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

TypeError: 'int'对象不可调用问题求助(仅可修改f变量)

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

你的错误根源在于:当前代码里f被赋值成了整数计算结果,但最后一行return f(a, b)是把f当成函数来调用,整数无法被当作函数执行,所以触发了这个报错。

按照要求只修改f =的部分,你需要把f赋值为函数对象,而非直接计算出的数值。修改后的代码如下:

def a_plus_abs_b(a, b):
    """Return a+abs(b), but without calling abs.
    
    >>> a_plus_abs_b(2, 3)
    5
    >>> a_plus_abs_b(2, -3)
    5
    """
    if b < 0:
        f = lambda a, b: a - b  # 等价于a + (-b),对应b为负时的a+abs(b)
    else:
        f = lambda a, b: a + b  # 直接a+b,对应b非负时的a+abs(b)
    return f(a, b)

也可以用内置的运算符函数替代lambda,写法更简洁:

def a_plus_abs_b(a, b):
    """Return a+abs(b), but without calling abs.
    
    >>> a_plus_abs_b(2, 3)
    5
    >>> a_plus_abs_b(2, -3)
    5
    """
    from operator import add, sub
    if b < 0:
        f = sub
    else:
        f = add
    return f(a, abs(b) if b<0 else b)  # 不对,哦不对,应该直接f(a, -b)如果b负?不,sub(a,b)是a-b,当b负时,a - b = a + |b|,对的,所以直接return f(a, b)?不对,当b负时,sub(a,b)是a - b,也就是a - (-|b|)=a+|b|,对的,所以代码可以写成:
    # 修正后的运算符版本:
    from operator import add, sub
    if b < 0:
        f = sub
    else:
        f = add
    return f(a, b if b>=0 else -b)
    # 哦不,其实更简单:当b<0时,f=lambda a,b: a - b 等价于sub(a,b),因为b是负数,a - b = a + |b|,所以直接return f(a,b)就行,比如b=-3,sub(2,-3)=2 - (-3)=5,正确。所以运算符版本可以简化:
    from operator import add, sub
    if b < 0:
        f = sub
    else:
        f = add
    return f(a, b)

这样修改后,f是一个可接收a和b参数的函数,调用f(a,b)就能得到正确的a+abs(b)结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:43