He sido parte de una revisión de código en la que tengo una condición como esta (código Python):
my_list = <whatever list> if len(my_list) <= 0: do_something() Me han señalado que la condición debe ser == en lugar de <= ya que una lista no puede tener una longitud negativa. No tengo problemas con eso en este caso, pero quería saber si realmente hay algún inconveniente al usar <= .
Aquí está mi razón de por qué usar <= :
not len(my_list) > 0 , que es equivalente a len(my_list) <= 0 , por lo que es correcto.len(my_list) == 0 solo no es equivalente a la condición original. Lo es en este caso, pero no es baladí por qué es así. len() devuelve el valor devuelto por __len__() que puede ser arbitrario. Solo resulta ser equivalente porque la implementación de len() realiza algunas validaciones en el valor. Se podría argumentar que la implementación de len() puede cambiar en el futuro, por lo que la equivalencia ya no se mantendría.len(my_list) <= 0 sería más seguro en general que usar len(my_list) == 0 más una suposición que podría no ser válida en algunos casos extremos o inesperados. Entonces, ¿son correctos mis argumentos? ¿Conoce alguna desventaja de usar len(my_list) <= 0 ?
Lo siento si esto parece una pregunta no relevante, pero me lo han planteado más de una vez en las revisiones de código, así que quería saber si hay algo que me falta.
Entonces, después de investigar un poco más, encontré esto en las recomendaciones de programación de Python PEP 8 ( https://peps.python.org/pep-0008/#programming-recommendations )
# Not recommended my_list = [] if not len(my_list): print('List is empty!') # Recommended my_list = [] if not my_list: print('List is empty!')¡así que ahora conoce la forma más pitónica de verificar si una lista está vacía!
¡Después de probar un poco, descubrí que esto funciona incluso para clases personalizadas! Pero mi prueba podría estar incompleta.
class Test: def __init__(self, len): self.len = len def __len__(self): return self.len t1 = Test(3) if len(t1): print("len1 > 0") if t1: print("len2 > 0") t1 = Test(0) if len(t1): print("len3 > 0") if t1: print("len4 > 0") t1 = Test(-1) if len(t1): print("len5 > 0")huellas dactilares
len1 > 0 len2 > 0 Exception has occurred: ValueError __len__() should return >= 0