我不明白为什么我不能在 lambda 中引用嵌套类的整数成员。 下面的代码演示了失败的情况。 在reduce 命令之前的打印中使用相同的引用,没有问题。
我遗漏了一些微妙之处吗?
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 )
print( reduce(lambda a, b : a.b.length + b.b.length, myList) )
我期待reduce 中的lambda 添加列出的类中包含的数字。 我进行了搜索,但找到了可以解释我遇到的问题的术语。 下面的输出显示了错误。 如有任何帮助,我们将不胜感激。
1
Traceback (most recent call last):
File "main.py", line 20, in <module>
print( reduce(lambda a, b : a.b.length + b.b.length, myList) )
File "main.py", line 20, in <lambda>
print( reduce(lambda a, b : a.b.length + b.b.length, myList) )
AttributeError: 'int' object has no attribute 'b'
reduce 函数需要返回 A 类的实例才能继续访问
.b.length
,否则,它返回一个 int,然后尝试为列表的其余部分计算 <type: int> + b.b.length
。
您正在寻找
sum(x.b.length for x in myList)