Ho faticato a trovare anche un modo decente per farlo, quindi mi è venuta un'idea (non un proiettile d'argento, dato che si tratta principalmente di una questione di gusti).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Trovo alcuni meriti in questa soluzione rispetto ad altri che ho visto, vale a dire, ottieni esattamente altri 4 spazi di rientro (bool), permettendo a tutte le condizioni di allinearsi verticalmente e il corpo dell'istruzione if può essere indentato in un modo chiaro (ish). Ciò mantiene anche i vantaggi della valutazione del corto circuito degli operatori booleani, ma ovviamente aggiunge il sovraccarico di una chiamata di funzione che sostanzialmente non fa nulla. Potresti sostenere (validamente) che qualsiasi funzione che restituisce il suo argomento potrebbe essere usata qui invece di bool, ma come ho detto, è solo un'idea ed è in definitiva una questione di gusti.
Abbastanza divertente, mentre stavo scrivendo questo e pensando al "problema", mi è venuta in mente un'altra idea, che rimuove l'overhead di una chiamata di funzione. Perché non indicare che stiamo per entrare in una condizione complessa usando coppie extra di parentesi? Dì, altri 2, per dare un bel rientro di 2 spazi delle sotto-condizioni relative al corpo dell'istruzione if. Esempio:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Mi piace un po 'perché quando lo guardi, una campana suona immediatamente nella tua testa dicendo "ehi, c'è una cosa complessa che succede qui!" . Sì, so che le parentesi non aiutano la leggibilità, ma queste condizioni dovrebbero apparire abbastanza raramente e quando si presentano, dovrai fermarti a leggerle attentamente (perché sono complesse ).
Ad ogni modo, solo altre due proposte che non ho visto qui. Spero che questo aiuti qualcuno :)
pep8
criteri del pacchetto. Ilpep8
del pacchetto di problema # 126 è di circa fissa il pacchetto di seguire rigorosamente le specifiche PEP8. La discussione per il problema include alcuni suggerimenti di stile visti anche qui.