Walczyłem też o znalezienie przyzwoitego sposobu, aby to zrobić, więc właśnie wpadłem na pomysł (nie srebrną kulę, ponieważ jest to głównie kwestia gustu).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Znalazłem kilka zalet tego rozwiązania w porównaniu do innych, które widziałem, a mianowicie otrzymujesz dokładnie 4 dodatkowe wcięcia (bool), pozwalając na wyrównanie wszystkich warunków w pionie, a treść instrukcji if można wciąć w jasny (ish) sposób. Zachowuje to również zalety oceny zwarcia operatorów logicznych, ale oczywiście dodaje narzut wywołania funkcji, która w zasadzie nic nie robi. Można argumentować (słusznie), że każda funkcja zwracająca swój argument może być tutaj użyta zamiast bool, ale jak powiedziałem, to tylko pomysł i ostatecznie kwestia gustu.
Zabawne, kiedy to pisałem i myślałem o „problemie”, wpadłem na jeszcze jeden pomysł, który usuwa narzut wywołania funkcji. Dlaczego nie wskazać, że za chwilę wejdziemy w złożony stan, używając dodatkowych par nawiasów? Powiedz jeszcze 2, aby uzyskać ładne wcięcie o 2 spacje warunków podrzędnych względem treści instrukcji if. Przykład:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Podoba mi się to, ponieważ kiedy na to patrzysz, natychmiast dzwoni ci w głowie dzwonek: „hej, dzieje się tu coś skomplikowanego! . Tak, wiem, że nawiasy nie poprawiają czytelności, ale warunki te powinny pojawiać się rzadko, a kiedy się pojawią, i tak będziesz musiał je zatrzymać i uważnie przeczytać (ponieważ są złożone ).
Tak czy inaczej, jeszcze dwie propozycje, których tu nie widziałem. Mam nadzieję, że to komuś pomoże :)
pep8
kryteria pakietu. Wpep8
pakiet za problem # 126 jest o ustalenie pakiet ściśle przestrzegać spec PEP8. Dyskusja na ten temat zawiera również sugestie dotyczące stylu, które można zobaczyć tutaj.