Soy bastante nuevo en Python e intento encontrar una mejor manera de codificar esto. Tiene que haber una manera, pero no estoy seguro de cómo hacerlo.
Las dos consultas son esencialmente las mismas, por lo que tiene que haber una forma de reducir. ¿Hay una manera más eficiente de hacer esto?
if set_date is not None:
if is_rejected != 'true':
query = query\
.filter(createddate__lte=set_date) \
.car_statuses(CarTow.TOWED) \
.order_by('-createddate')
else:
query = query\
.filter(createddate__lte=set_date) \
.car_statuses(CarTow.TOWED,CarTow.CONFIRMED) \
.order_by('-createddate')
return query
Lo siento si esta es una pregunta simple, novato aquí.
3 respuestas
Puede simplificar sacando el argumento que difiere en la declaración if y dejando afuera las cosas comunes.
if set_date is not None:
if is_rejected != 'true':
car_statuses = (CarTow.TOWED,)
else:
car_statuses = (CarTow.TOWED, CarTow.CONFIRMED)
query = query\
.filter(createddate__lte=set_date) \
.car_statuses(*car_statuses) \
.order_by('-createddate')
return query
Puede usar la lógica ternaria para agregar las tuplas.
query = (
query
.filter(createddate__lte = set_date)
.car_statuses((CarTow.TOWED,) + ((CarTow.CONFIRMED,) if is_rejected == 'true' else ())
.order_by('-createddate')
)
Probablemente quieras reemplazar esto:
if set_date is not None:
Con esto:
if set_date:
Eche un vistazo a cómo Python evalúa el if condicional: Prueba del valor de la verdad (pydocs)
Aquí están la mayoría de los objetos incorporados considerados falsos: constantes definidas como falsas: ninguna y falsa. cero de cualquier tipo numérico: 0, 0.0, 0j, Decimal (0), Fracción (0, 1) secuencias y colecciones vacías: '', (), [], {}, set (), rango (0)
Además, 'es' puede dar algunos resultados extraños, es realmente para determinar si dos etiquetas hacen referencia al mismo objeto o no. Entendiendo que Python es el operador
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.