He estado luchando por encontrar una forma decente de hacer esto también, así que se me ocurrió una idea (no una bala de plata, ya que esto es principalmente una cuestión de gustos).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Encuentro algunos méritos en esta solución en comparación con otros que he visto, a saber, obtienes exactamente 4 espacios adicionales de sangría (bool), permitiendo que todas las condiciones se alineen verticalmente, y el cuerpo de la declaración if puede sangrarse en una manera clara (ish) Esto también mantiene los beneficios de la evaluación de cortocircuito de los operadores booleanos, pero, por supuesto, agrega la sobrecarga de una llamada de función que básicamente no hace nada. Se podría argumentar (válidamente) que cualquier función que devuelva su argumento podría usarse aquí en lugar de bool, pero como dije, es solo una idea y, en última instancia, es cuestión de gustos.
Curiosamente, mientras escribía esto y pensaba en el "problema", se me ocurrió otra idea, que elimina la sobrecarga de una llamada de función. ¿Por qué no indicar que estamos a punto de entrar en una condición compleja mediante el uso de pares de paréntesis adicionales? Digamos 2 más para dar una buena sangría de 2 espacios de las subcondiciones relativas al cuerpo de la declaración if. Ejemplo:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Me gusta esto porque cuando lo miras, inmediatamente suena una campana en tu cabeza que dice "¡Oye, hay algo complejo aquí!" . Sí, sé que los paréntesis no ayudan a la legibilidad, pero estas condiciones deberían aparecer raramente, y cuando aparezcan, tendrás que detenerte y leerlas con cuidado de todos modos (porque son complejas ).
De todos modos, solo dos propuestas más que no he visto aquí. Espero que esto ayude a alguien :)
pep8
criterios del paquete. El problemapep8
del paquete # 126 se trata de arreglar el paquete para seguir estrictamente la especificación PEP8. La discusión sobre el tema incluye algunas sugerencias de estilo que también se ven aquí.