【发布时间】:2019-12-30 07:02:12
【问题描述】:
这是简单的代码。
class C:
def __init__(self):
self.l = [1,2,3]
a = C()
b = C()
c = C()
reduce(lambda x,y: x.l + y.l, [a,b,c])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'list' object has no attribute 'l'
我知道还有其他几种方法。但我想看看为什么这不起作用。
输出应该与给出的相同
sum([x.l for x in [a,b,c]], [])
这是
[1, 2, 3, 1, 2, 3, 1, 2, 3]
【问题讨论】:
-
预期的结果是什么?
x.l + y.l生成一个列表,该列表将反馈到下一个 reduce 调用中。您的函数期望两个参数都是C对象。为此,您需要返回一个C对象。 This 代码运行,但可能无法执行您需要它执行的操作。 -
我期望的是
sum([x.l for x in [a,b,c]], [])那么,你的意思是这不能写成一个 lins 代码吗? -
是的,它可能可以,但我只是将它作为一个函数,让我可以在其中放置打印语句。我的代码和答案的区别在于结果是一个
C对象。可能是你想要的,也可能不是。
标签: python object lambda reduce functools