Два упомянутых вами раздела отличаются тем, что первый касается строк продолжения, за которыми следует блок (например, многострочный оператор def
или if
), а второй - закрывающих скобок и скобок при воздействии ивызовы функций.При запуске блока вы не захотите ставить закрывающую скобку в начале следующей строки, потому что возвращение к исходному отступу передает конец блока.Несколько примеров, которые явно выглядят странно:
def long_function_foo(
var_one, var_two, var_three,
var_four
):
print('This code really looks out of place')
def long_function_bar(
var_one,
var_two
):
print('and so does this one')
PEP8 допускает то, что они называют вертикальным выравниванием, и многие примеры в различных PEP используют это соглашение, которое стало автоматизированной функцией IDE Python:
def long_function_name(var_one, var_two, var_three,
var_four, var_five):
"""Documentation would go here, which makes it look better."""
print(var_one + var_two + var_three)
Но я лично этого избегаю.Это тема, основанная на мнении, но мне не нравится полагаться на выравнивание через определенное количество пробелов.Утомительно поддерживать и слишком сильно полагаться на умные отступы IDE.Я предпочитаю это обозначение, которое разрешено PEP8, но не кажется таким популярным.Обратите внимание на двойной отступ, используемый для отличия от тела функции:
def long_function_name(
alpha, bravo, charlie, delta, echo, foxtrot,
hotel, indiana):
"""Documentation would go here."""
print(var_one + var_two + var_three)
Когда речь идет о вызовах и назначениях функций, у PEP8 нет четкого ответа.Можно заключить отступ в закрывающую скобку, чтобы имитировать, как заканчиваются блоки, когда следующая инструкция имеет меньший отступ.
foo = bar(
1, 2, 3
)
Вертикальное выравнивание очень популярно, и я признаю, что оно выглядит хорошо, но опять-таки я нене хочу навязывать размер отступа будущим читателям моего кода, поэтому я избегаю этого:
foo = bar(1, 2, 3, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14)
Или можно также поставить закрывающую скобку / скобку выровненной по левому краю:
foo = bar(
1, 2, 3
)
Исходя из C ++, Java и JavaScript, я использую второй вариант.