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

Python Lambda表达式访问嵌套类成员报错问题求助

问题解答:reduce中Lambda引用嵌套类成员报错的原因与解决方法

错误原因

你没搞清楚reduce的执行逻辑:

  • 第一次调用Lambda时,a是列表第一个元素(A类实例),b是第二个元素(A类实例),计算后返回1+5=6(整数类型);
  • 第二次调用Lambda时,a变成了这个整数6,b是列表第三个元素(A类实例),此时访问a.b.length必然报错——整数根本没有b属性。

解决方法

最简洁且符合逻辑的写法是给reduce指定初始值0,让累加的初始状态和每次计算结果都保持整数类型:

from functools import reduce

class B :
    def __init__(self, n) :
        self.length = n

class A :
    def __init__(self, n) :
        self.b = B(n)

myList = [A(1), A(5), A(7)]

print(myList[0].b.length)
# 修改后的reduce调用
print(reduce(lambda total, item: total + item.b.length, myList, 0))

执行后会输出1和13,完全符合你累加数值的需求。

补充说明

如果坚持不指定初始值,也可以通过判断参数类型来兼容,但这种写法冗余且可读性差,不推荐:

print(reduce(lambda a, b: a + b.b.length if isinstance(a, int) else a.b.length + b.b.length, myList))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:35