Comparación de Python encadenado

Tengo este codigo

if self.date: # check date is not NoneType if self.live and self.date = now: return True return False 

Mi IDE dice: Parece que debería simplificarse, es decir, la comparación en cadena de Python.

¿Qué es una comparación encadenada y cómo puede simplificarse?

A continuación se muestra un ejemplo de una comparación encadenada.

 age = 25 if 18 < age <= 25: print('Chained comparison!') 

Tenga en cuenta que debajo de las cubiertas esto es exactamente lo mismo que se muestra a continuación, simplemente se ve mejor.

 age = 25 if 18 < age and age <= 25: print('Chained comparison!') 
 self.age <= now and self.age >= now 

Se puede simplificar para:

 now <= self.age <= now 

Pero como es cierto solo cuando self.age es igual a now , podemos simplificar todo el algoritmo para:

 if self.date and self.live and self.age==now: return True return False 

Si desea comprobar si la edad está en algún rango, utilice la comparación encadenada:

 if lower<=self.age<=Upper: ... 

O:

 if self.age in range(Lower, Upper+1): ... 

Su código puede y debe reducirse a:

 return self.date and self.live and self.date == now 

esto es porque:

  1. now <= self.date <= now es matemáticamente igual a self.date == now
  2. si devuelve un valor booleano dependiendo de si una condición es verdadera, es lo mismo que simplemente devolver el resultado de evaluar la expresión de la condición en sí.

En cuanto a reducir a <= b and b<= c : es lo mismo que a <= b <= c ; y esto realmente funciona con cualquier otro operador.

Para verificar si x es superior a 5 e inferior a 20 , puede usar una comparación de cadena simplificada , es decir:

 x = 10 if 5 < x < 20: # yes, x is superior to 5 and x is inferior to 20 # it's the same as: if x > 5 and x < 20: 

Lo anterior es un ejemplo simple, pero creo que ayudará a los nuevos usuarios a comenzar con la comparación simplificada de cadenas en python