Зависит от того, что вы подразумеваете под «правильным».
Что касается PEP 8 , то оба стиля действительны ...
Да
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# More indentation included to distinguish this from the rest.
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# Hanging indents should add a level.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
… но оба ваших примера неверны по другим причинам.
Второй отступ с 2 пробелами, первый с 19 отступами, но:
Используйте 4 пробела на уровень отступа.
(не полностью ясно, что «больше отступов» должно быть фиксированным числом уровней отступа, но я почти уверен, что это намерение.)
Однако, это также говорит о том, что:
Правило 4 пробелов не является обязательным для строк продолжения.
Конечно, весь PEP 8 является необязательным, особенно для кода, который не предназначен для stdlib, но это, очевидно, , особенно необязательно.
И оба они выходят далеко за правый край окна:
Ограничить все строки максимум 79 символами.
Для длинных длинных блоков текста с меньшим количеством структурных ограничений (строк документации или комментариев) длина строки должна быть ограничена 72 символами.
А первый ставит закрывающую скобку не на то место:
Закрывающая скобка / скобка / скобка в многострочных конструкциях может располагаться либо под первым непробельным символом последней строки списка, как в:
my_list = [
1, 2, 3,
4, 5, 6,
]
… или он может быть выстроен под первым символом строки, которая начинает многострочную конструкцию, например:
my_list = [
1, 2, 3,
4, 5, 6,
]
Ваш второй пример правильно работает со второй версией; Ваш первый пример ошибается в первой версии.
Однако здесь есть очевидное преимущество для второго стиля (правильно установленного для использования отступа в 4 пробела): вся причина, по которой вы разбиваете это на несколько строк, состоит в том, чтобы упростить размещение текста в окне. (даже если вам не удалось). Первый стиль тратит лишние 14 символов в каждой строке, поэтому он имеет меньший эффект.
Стоит также отметить, что black
и другие автоматические средства форматирования кода заменят ваш первый пример на второй (опять же, за исключением отступа в 4 пробела).