Я изо всех сил пытался найти достойный способ сделать это, поэтому я просто пришел с идеей (не серебряная пуля, так как это в основном дело вкуса).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Я нашел несколько достоинств в этом решении по сравнению с другими, которые я видел, а именно, вы получаете ровно дополнительные 4 пробела отступа (bool), позволяя всем условиям выстраиваться вертикально, а тело оператора if может быть смещено в ясный путь Это также сохраняет преимущества оценки коротких замыканий логических операторов, но, конечно, добавляет накладные расходы при вызове функции, которая в основном ничего не делает. Вы могли бы утверждать (действительно), что любая функция, возвращающая свой аргумент, могла бы использоваться здесь вместо bool, но, как я уже сказал, это всего лишь идея, и в конечном итоге это вопрос вкуса.
Как ни странно, когда я писал это и думал о «проблеме», у меня появилась еще одна идея, которая устраняет накладные расходы при вызове функции. Почему бы не указать, что мы собираемся ввести сложное условие, используя дополнительные пары скобок? Скажем, еще 2, чтобы получить хороший 2 пробела для подусловий относительно тела оператора if. Пример:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Мне это нравится, потому что, когда вы смотрите на это, в вашей голове немедленно звонит колокольчик, говоря: «Эй, здесь происходит сложная вещь!» , Да, я знаю, что круглые скобки не помогают читабельности, но эти условия должны появляться достаточно редко, и когда они все-таки появятся, вам в любом случае придется остановиться и прочитать их осторожно (потому что они сложные ).
Во всяком случае, еще два предложения, которые я не видел здесь. Надеюсь, это поможет кому-то :)
pep8
критериям пакета. Вpep8
ПАКЕТЕ в выпуске № 126 о фиксации пакета строго следовать PEP8 спецификации. Обсуждение проблемы включает в себя некоторые предложения по стилю, которые также можно увидеть здесь.