以下のラムダ式はリストを返すべきではありませんか?現在、そうではありません。リスト演算を伴うラムダ式
>>> f=lambda l ,x:l.append(x)
>>> print f([1],3)
None
以下のラムダ式はリストを返すべきではありませんか?現在、そうではありません。リスト演算を伴うラムダ式
>>> f=lambda l ,x:l.append(x)
>>> print f([1],3)
None
append
副作用関数です。値を返さずに既存のリストに値を追加します(または、考え方によってはNone)。
おそらく、あなたがしたい:
lambda l, x: l + [x]
はこれが最後に付加要素を持つ既存のリストから新しいリストを作成します。
関数append
はNone
を返しますので、ラムダはNone
を返します。またappend
だけ
"何も返されません "が間違っています。 **「なし」は何もない**。それが何であるかを見るには 'print(type(None))'を使ってください。 – Matthias
list.append()
は値を返しませんが、Pythonのリストがmutable objectであるため、ローカル変数l
を変更し、3
は確かにそれだけで返されません、追加されます。あなたがt
を変更したくない場合は、ラムダはリストt
は変更されませんよう
t = [1]
f(t, 3)
print(t) # [1, 3]
はあなたが
f = lambda l, x: l + [x]
t = [1]
print(f(t, 3)) # [1, 3]
print(t) # [1]
を書くことができますが、ちょうど新しいリストを返す:
たとえば、これは動作します。
なぜですか? 'return'はなく、' l.append'はリストを返しません。 –
@LutzHorn: 'return'の欠落は問題ではありません(' lambda'sは暗黙的に評価された式の結果を返します)、 'list.append'は' None'を返します。明示的に何かを返す)、それは期待どおりに動作しないことを意味します。 – ShadowRanger