Python、これはバグですか、タプル内のリストに追加するとNoneになりますか?[重複]

StackOverflow https://stackoverflow.com//questions/9617906

質問

これは私が長い間書いた最も短い例の1つです

私はtuple3を作成して更新します

In [65]: arf=(0,1,[1,2,3])

In [66]: arf=(arf[0],arf[1], arf[2] )

In [67]: arf
Out[67]: (0, 1, [1, 2, 3])

それで、再割り当てはうまくいきました。

今、私はそれの内容を変更しようとします。

In [69]: arf=(arf[0],arf[1], [2] )

In [70]: arf
Out[70]: (0, 1, [2])

In [71]: arf=(arf[0],arf[1], arf[2].append(3) )

In [72]: arf
Out[72]: (0, 1, None)

私は何も戻って取得しませんか???こんにちはう感?申し訳ありませんが、私はpythonの初心者です。

役に立ちましたか?

解決

list.append() 常に戻ります None

だから arf[2].append(3) が追加されます 3arf と返す None

あなたはこの変更を見ることは決してありません arf[2] あなたはすぐに再バインドされているので arf 新しく作成されたタプルに

おそらくこれはあなたが望むものです

arf = (arf[0], arf[1], arf[2]+[3])

他のヒント

ザ- list.append メソッドは、所定の位置にリストを変更し、返します None.これはバグではありません、これはちょうどどのようにです append メソッドは動作します。

append doesn'[tは新しいリストを返しますが、古いリストをその場で変更します:

>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]

Gnibblerの答えを詳しく説明するには、リストします。append()はリスト自体を変更しますが、リストの新しい値を返しません。それは戻ります None.したがって、コマンド71はarf[2]の値を必要な方法で変更しますが、すぐに戻ります None そして、arf[2]をそれに設定します。

あなたの例の自己参照は物事を少し難読化しますが、次のようなコマンドを試してみると someothervariable=arf[2].append(3), 、あなたはそれがどのように動作するかが表示されます。 someothervariable に設定されています。 None また、arf[2]には、明示的な代入文なしで3が追加されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top