Оформляя свой код или текст, следует придерживаться единых правил, чтобы не создавать лишних вопросов у читателя. Выбор правил оформления может быть гибким, но следовать им нужно твёрдо, иначе внимание невольно будет спотыкаться о то, как в схожих ситуациях вылезают разные способы решения.


Пример 1

Всегда обращайте внимание на закрывающие запятые и скобки.

Плохо:


if not advance_amount and not advance_percent:
    raise ValidationError(
        'Введены некорректные значения для полей '
        '"Размер аванса в процентах" и "Размер аванса, руб.". '
        'Сбросить оба значения поля можно убрав галочку с поля "Авансирование".')
elif advance_amount > initial_contract_price:
    raise ValidationError(
        'Значение поля "Размер аванса, руб." не может быть больше'
        'значения поля "Начальная (максимальная) цена контракта, руб."',
    )

Хорошо:


if not advance_amount and not advance_percent:
    raise ValidationError(
        'Введены некорректные значения для полей '
        '"Размер аванса в процентах" и "Размер аванса, руб.". '
        'Сбросить оба значения поля можно убрав галочку с поля "Авансирование".'
    )
elif advance_amount > initial_contract_price:
    raise ValidationError(
        'Значение поля "Размер аванса, руб." не может быть больше'
        'значения поля "Начальная (максимальная) цена контракта, руб."'
    )


Пример 2

Всегда обращайте внимание на закрывающие запятые и скобки.

Плохо:


if set_is_advance(is_advance, cleaned_data):
    return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
    set_advance_if_advance_percent_change(
        initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data
    )
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
    set_advance_if_advance_amount_change(
        initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data)

Хорошо:


if set_is_advance(is_advance, cleaned_data):
    return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
    set_advance_if_advance_percent_change(
        initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data,
    )
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
    set_advance_if_advance_amount_change(
        initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data,
    )

Хорошо:


if set_is_advance(is_advance, cleaned_data):
    return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
    set_advance_if_advance_percent_change(
        initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data)
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
    set_advance_if_advance_amount_change(
        initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data)


Пример 3

Если принято решение разносить аргументы или элементы коллекции по строкам, каждый из элементов должен быть оформлен по единым правилам.

Плохо:


@pytest.mark.parametrize('input_data, expected', [
    ((True, True, 13, 500, 1000), (13, 130)),
    ((True, True, None, 500, 1000), (None, None)),
    ((True, True, 13, None, 1000), (13, 130)),
])

Хорошо:


@pytest.mark.parametrize(
    'input_data, expected',
    [
        ((True, True, 13, 500, 1000), (13, 130)),
        ((True, True, None, 500, 1000), (None, None)),
        ((True, True, 13, None, 1000), (13, 130)),
    ],
)