Почему дополнение списка Python должно быть однородным?
Может кто-нибудь знаком с PythonВнутренние элементы (CPython или другие реализации) объясняют, почему добавление в список должно быть однородным:
In [1]: x = [1]
In [2]: x+"foo"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Users\Marcin\ in ()
----> 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 'вопрос здесь:Поведение Pythons список + = повторяемость документирована где-нибудь?
Обновление: я знаю, что это не требуется, чтобы гетерогенные+=
работать (но это делает), а также, не требуется, чтобы гетерогенные+
быть ошибкой Этот вопрос о том, почему был сделан этот последний выбор.
Слишком много, чтобы сказать, что результаты добавления последовательности в список являются неопределенными. Если бы это было достаточным возражением, имело бы смысл предотвратить разнородные+=
, Обновление 2: В частности, python всегда делегирует вызовы операторов левому операнду, так что никаких проблем »что правильно делать " возникает»: левый объект всегда управляет (если он не делегирует справа).
Обновление 3: Для тех, кто утверждает, что это проектное решение, пожалуйста, объясните (а) почему оно не задокументировано; или (б) где это задокументировано.
Update4: "что должно[1] + (2, )
вернуть?" Он должен возвращать значение результата, равное значению переменнойx
изначально держит[1]
незамедлительно послеx+=(2, )
, Этот результат четко определен.