Extensión de la lista de Python y asignación de variables

Intenté extender una lista y quedé desconcertado al devolver el resultado con el valor Ninguno. Lo que intenté fue esto:

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

Finalmente me di cuenta de que el problema era la asignación redundante a ‘a’ al final. Así que esto funciona:

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

Lo que no entiendo es por qué la primera versión no funcionó. La asignación a ‘a’ era redundante, pero ¿por qué interrumpió la operación?

Porque, como habrás notado, el valor de retorno de extend es None . Esto es común en la biblioteca estándar de Python; las operaciones destructivas devuelven None , es decir, sin valor, por lo que no tendrá la tentación de usarlas como si fueran funciones puras. Lea la explicación de Guido de esta elección de diseño.

Por ejemplo, el método de sort en listas también devuelve None , mientras que la función sorted no destructiva devuelve un valor.

Debido a que todas las funciones in situ devuelven None , para enfatizar el hecho de que están mutando su argumento. De lo contrario, podría asignar el valor de retorno a algo, sin darse cuenta de que el argumento también había cambiado.

Simplemente .extend () devuelve ninguno

Si quieres puedes unirte a ellos como tales;

a = a + b