Pythonの内部(CPythonまたは他の実装)に精通している人は、リストの追加が同種である必要がある理由を説明できますか?
In [1]: x = [1]
In [2]: x+"foo"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Users\Marcin\<ipython-input-2-94cd84126ddc> in <module>()
----> 1 x+"foo"
TypeError: can only concatenate list (not "str") to list
In [3]: x+="foo"
In [4]: x
Out[4]: [1, 'f', 'o', 'o']
上記が上記のトランスクリプトx+"foo"
の最終値と同じ値を返さないのはなぜですか?x
この質問は、ここでのNPEの質問に続くものです。Pythonのリストの動作+ =反復可能であるかどうかは、どこにでも文書化されていますか?
更新:異種の作業は必須ではないことを私は知っています+=
(しかし、そうします)。同様に、異種の作業が+
エラーである必要はありません。この質問は、なぜ後者の選択がなされたのかについてです。
リストにシーケンスを追加した結果が不確実であると言っても過言ではありません。それが十分な異議である場合、異質性を防ぐことは理にかなってい+=
ます。Update2:特に、Pythonは常に演算子の呼び出しを左側のオペランドに委任するため、「何をするのが正しいか」という問題は発生しません。左側のオブジェクトが常に支配します(右側に委任しない限り)。
Update3:これが設計上の決定であると主張する人のために、(a)それが文書化されていない理由を説明してください。または(b)文書化されている場合。
Update4:「何を[1] + (2, )
返す必要がありますか?」の直後にx
最初に保持されている変数の値と等しい結果値を返す必要があります。この結果は明確に定義されています。[1]
x+=(2, )