下面的lambda表達式不應該返回一個列表嗎?目前,事實並非如此。帶列表操作的Lambda表達式
>>> f=lambda l ,x:l.append(x)
>>> print f([1],3)
None
下面的lambda表達式不應該返回一個列表嗎?目前,事實並非如此。帶列表操作的Lambda表達式
>>> f=lambda l ,x:l.append(x)
>>> print f([1],3)
None
函數append
返回None
所以你的lambda也返回None
。另外,append
改變局部變量l
只有
它「不返回任何東西」是錯誤的。 **'沒有'不是什麼**。使用'print(type(None))'來查看它是什麼。 – Matthias
list.append()
不返回一個值,但由於Python列表是mutable object,3
的確會追加,它只是沒有得到恢復。
例如,這將工作:
t = [1]
f(t, 3)
print(t) # [1, 3]
如果你不想修改t
你可以寫
f = lambda l, x: l + [x]
t = [1]
print(f(t, 3)) # [1, 3]
print(t) # [1]
的拉姆達不會修改列表t
,但只返回一個新的列表。
爲什麼?沒有'return'並且'l.append'不返回一個列表。 – 2016-06-14 12:15:23
@LutzHorn:缺少'return'並不重要('lambda's會返回隱式計算表達式的結果),但是,'list.append'返回'None'(函數的默認返回值' t明確地返回),這意味着它不會按預期工作。 – ShadowRanger