Собственный отступ Python для переменной, присвоенной значению многострочной функции? - PullRequest
0 голосов
/ 06 июля 2018

Каков правильный отступ для переменной, которая установлена ​​на выход многострочной функции?

Я видел, как он продвинулся к знаку равенства, вот так:

dept_alias_valid = RegexValidator(
                  '^(?!.*--)(?!.*__)(?!.*-_)(?!.*_-)([@]+[a-z][a-z\-_]+[a-z]+)$', 
                  "Alias must: start with @ and the remainder can contain only lowercase letters a-z _underscores -dashes with neither trailing nor back-to-back special characters and spaces are right out!"
                   )

И я тоже видел это так:

dept_alias_valid = RegexValidator(
  '^(?!.*--)(?!.*__)(?!.*-_)(?!.*_-)([@]+[a-z][a-z\-_]+[a-z]+)$', 
  "Alias must: start with @ and the remainder can contain only lowercase letters a-z _underscores -dashes with neither trailing nor back-to-back special characters and spaces are right out!"
)

1 Ответ

0 голосов
/ 06 июля 2018

Зависит от того, что вы подразумеваете под «правильным».


Что касается 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 пробела).

...