Por que a adição da lista do Python deve ser homogênea?
Alguém familiarizado com os componentes internos do Python (CPython ou outras implementações) explica porque é necessário que a adição de lista seja homogênea:
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']
Por que não deveriax+"foo"
acima, retorne o mesmo valor que o valor final dex
na transcrição acima?
Esta questão segue a questão da NPE aqui:O comportamento da lista do Python é + iterável documentado em algum lugar?
Atualização: Eu sei que não é necessário que heterogêneo+=
trabalho (mas o faz) e, da mesma forma, não é necessário que+
seja um erro. Esta questão é sobre por que essa última escolha foi feita.
É demais dizer que os resultados da adição de uma sequência a uma lista são incertos. Se isso fosse uma objeção suficiente, faria sentido evitar a heterogeneidade+=
. Update2: Em particular, python sempre delega chamadas de operadores ao operando da esquerda, então nenhum problema "o que é a coisa certa a se fazer" surge ": o objeto da mão esquerda sempre governa (a menos que ele delegue à direita).
Update3: Para qualquer um que argumente que esta é uma decisão de design, por favor explique (a) por que ela não está documentada; ou (b) onde está documentado.
Update4: "o que deveria[1] + (2, )
return? "Deve retornar um valor de resultado igual ao valor de uma variávelx
inicialmente segurando[1]
imediatamente depoisx+=(2, )
. Este resultado é bem definido.