¿Por qué la adición de la lista de Python debe ser homogénea?
¿Puede alguien familiarizado con las partes internas de Python (CPython u otras implementaciones) explicar por qué se requiere que la adición de la lista sea 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 qué no deberíax+"foo"
arriba devuelve el mismo valor que el valor final dex
en la transcripción anterior?
Esta pregunta se deriva de la pregunta de NPE aquí:¿Está el comportamiento de la lista de Python + = iterable documentado en alguna parte?
Actualización: Sé que no se requiere que sea heterogéneo.+=
trabajo (pero lo hace) y de la misma manera, no se requiere que los heterogéneos+
ser un error Esta pregunta es sobre por qué se hizo esta última elección.
Es demasiado decir que los resultados de agregar una secuencia a una lista son inciertos. Si esa fuera una objeción suficiente, tendría sentido prevenir la heterogeneidad.+=
. Actualización 2: en particular, python siempre delega las llamadas del operador al operando de la izquierda, así que no surge el problema "lo que es correcto" surge ": el objeto de la izquierda siempre rige (a menos que delegue a la derecha).
Actualización 3: Para cualquier persona que sostenga que esta es una decisión de diseño, explique (a) por qué no está documentada; o (b) donde esté documentado.
Update4: "lo que debería[1] + (2, )
return? "Debe devolver un valor de resultado igual al valor de una variablex
inicialmente manteniendo[1]
inmediatamente despuesx+=(2, )
. Este resultado está bien definido.