¿Por qué list.append se evalúa como falso en un contexto booleano? [duplicar]
¿Hay alguna razón para que list.append
la evaluación sea falsa? ¿O es simplemente la convención C de devolver 0 cuando tiene éxito lo que entra en juego?
>>> u = []
>>> not u.append(6)
True
La mayoría de los métodos de Python que mutan un contenedor in situ regresan None
: una aplicación del principio de separación entre comandos y consultas . (Python siempre es razonablemente pragmático acerca de las cosas, por lo que algunos mutadores devuelven un valor utilizable cuando, de lo contrario, obtenerlo sería costoso o un desastre; el pop
método es un buen ejemplo de este pragmatismo, pero esos son definitivamente la excepción, no la regla. , y no hay razón para hacer append
una excepción).
None
evalúa en False
Python y en Python se supone que una función que no devuelve nada ha devuelto None
.
Si escribes:
>> print u.append(6)
None
Tadaam :)
porque .append
el método regresa None
, por lo tanto not None
se evalúa como True
. Python en caso de error generalmente genera un error:
>>> a = ()
>>> a.append(5)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.append(5)
AttributeError: 'tuple' object has no attribute 'append'