¿Por qué el apéndice no devuelve ninguno en este código?

list = [1, 2, 3] print list.append(4) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print list ## [1, 2, 3, 4] 

Estoy aprendiendo Python y no estoy seguro de si este problema es específico del lenguaje y cómo se implementa la aplicación en Python.

append es una operación de mutación (destructiva) (modifica la lista en su lugar en lugar de devolver una nueva lista). La forma idiomática de hacer el equivalente no destructivo de append sería

 l = [1,2,3] print l + [4] # [1,2,3,4] print l # [1,2,3] 

para responder a su pregunta, mi conjetura es que si el append devolvió la lista recién modificada, los usuarios podrían pensar que no fue destructivo, es decir, podrían escribir código como

 m = l.append("a") n = l.append("b") 

y espera que n sea [1,2,3,"b"]

Es una convención en Python que los métodos que mutan secuencias devuelven None .

Considerar:

 >>> a_list = [3, 2, 1] >>> print a_list.sort() None >>> a_list [1, 2, 3] >>> a_dict = {} >>> print a_dict.__setitem__('a', 1) None >>> a_dict {'a': 1} >>> a_set = set() >>> print a_set.add(1) None >>> a_set set([1]) 

Comenzando en Python 3.3, esto ahora está documentado más explícitamente :

Algunas clases de colección son mutables. Los métodos que agregan, restan o reorganizan sus miembros en su lugar, y no devuelven un elemento específico, nunca devuelven la instancia de colección en sí, sino None .

Las preguntas frecuentes sobre diseño e historia proporcionan el razonamiento detrás de esta decisión de diseño (con respecto a las listas):

¿Por qué list.sort( ) no devuelve la lista ordenada?

En situaciones donde el desempeño es importante, hacer una copia de la lista para clasificarla sería un desperdicio. Por lo tanto, list.sort() ordena la lista en su lugar. Para recordarle este hecho, no devuelve la lista ordenada. De esta manera, no se dejará engañar por la sobreescritura accidental de una lista cuando necesite una copia ordenada, sino que también deberá mantener la versión sin clasificar.

En Python 2.4 se ha agregado una nueva función incorporada, sorted() . Esta función crea una nueva lista a partir de un iterable proporcionado, la ordena y la devuelve.

Un consejo sería evitar el uso de palabras clave o funciones como nombres de variables. En tu código de arriba, usas la lista como una variable:

 list = [1, 2, 3] 

No recomendaría el uso de la list como nombre de variable, ya que la lista ya está definida como un tipo incorporado. Como lo señalaron ChaseTheSun y squiguy, entonces no hay mucho más que eso.

 l = [1, 2, 3] l.append(4) print l ## [1, 2, 3, 4] 

No devuelve nada. se agrega / agrega a la variable, para ver que debe usar la primera variable que se usó para adjuntar en la impresión

 friends=["Rajendra V"] friends.append("John") print(friends)