奇怪的减少行为

问题描述

| 当我在python 2.6中执行此代码
reduce(lambda x,y: x+[y],[1,2,3],[])
我得到预期的[1、2、3]。 但是当我执行此命令时(我认为它等同于以前的命令)
reduce(lambda x,y: x.append(y),[])
我收到一条错误消息
Traceback (most recent call last):
File \"<stdin>\",line 1,in <module>
  File \"<stdin>\",in <lambda>
AttributeError: \'nonetype\' object has no attribute \'append\'
为什么这两行代码没有给出相同的结果?     

解决方法

x.append(y)
不等于
x+[y]
append
修改一个列表,不返回任何内容,
x+[y]
是一个返回结果的表达式。     ,
reduce
调用该函数并将返回值用作新结果。
append
返回
None
,因此下一个
append
调用失败。你可以写
def tmpf(x,y):
   x.append(y)
   return x
reduce(tmpf,[1,2,3],[])
并获得正确的结果。但是,如果结果是与输入大小相同的列表,则您不是在寻找reduce:reduce的结果通常应该是单个值。而是使用map或简单地
[x for x in [1,3]]
    ,argument7ѭ的函数参数应返回运算结果。
x+[y]
这样做,而
x.append(y)
不这样做(后者修改
x
并返回
None
)。     ,只是为了解释错误消息:
AttributeError: \'NoneType\' object has no attribute \'append\'
表达方式
reduce(lambda x,y: x.append(y),[])
相当于
[].append(1).append(2).append(3)
由于
[].append(1)
不返回值,即返回
None
尝试执行(第二步)
None.append(2)
导致错误消息message24ѭ