Как стилизовать длинные строки в Python, используя стиль Google Python и Pylint?

Я пытаюсь очистить свой код для назначения, запустив pylint поверх него с помощью файла rc в стиле google python. Я просто хочу подтвердить, что это правильный стиль для первой строки печати, так как он выглядит довольно странно, но rcfile в стиле Google показывает, что это правильный стиль. Я знаю, что длина каждой строки не должна превышать 80 символов

for position, length in STEPS:
    guess = prompt_guess(position, length)
    score = compute_score(guess, position, word)
    total = + total + score
    print("Your guess and score were: " + ('_' * position + str(guess) +
                                           ('_' * (len(word) - length -
                                                   position))) + " : " +
          str(score))
    print("")

Я бы отформатировал это так:

for position, length in STEPS:
    guess = prompt_guess(position, length)
    score = compute_score(guess, position, word)
    total = + total + score
    print("Your guess and score were: " + ('_' * position + str(guess) +
         ('_' * (len(word) - length -position))) + " : " + str(score))
    print("")

Любое разъяснение будет оценено, спасибо

3 ответа

Решение

Вы не должны строить свою строку внутри print, Когда дело доходит до очень длинного сообщения, сделайте несколько шагов для его создания.

s = "Your guess and score were: "
s += '_' * position
s += str(guess)
s += '_' * (len(word) - length - position)
s += " : "
s += str(score))

Вы можете сделать его немного чище, используя str.format метод. Параметры заменят фигурные скобки в соответствии с указанными именами:

pad1 = '_' * position
pad2 = '_' * (len(word) - length - position)
s = "Your guess and score were: {pad1}{guess}{pad2} : {score}"
s = s.format(pad1=pad1, pad2=pad2, guess=guess, score=score)

Это позволяет сделать отступ для параметров в виде списка, если их имена длинные:

s = s.format(pad1=pad1,
             pad2=pad2,
             guess=guess,
             score=score)

Если определение каждого параметра достаточно короткое, вы можете отправить его на format метод:

s = "Your guess and score were: {pad1}{guess}{pad2} : {score}"
s = s.format(pad1='_' * position,
             pad2='_' * (len(word) - length - position),
             guess=guess,
             score=score)

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

s = "Your guess and score were: {}{}{} : {}"
s = s.format(pad1, guess, pad2, score)

Правильно, отступ зависит от скобок предыдущей строки. Но удобочитаемость - это больше, чем просто прохождение пилинта.

print("Your guess and score were: {PAD1}{GUESS}{PAD2} : {SCORE}"
      "".format(PAD1='_' * position,
                GUESS=guess,
                PAD2='_' * (len(word) - length - position),
                SCORE=score))

(Использование конкатенации строк упрощает форматирование более длинных строк.)

См. PEP-8 об отступах:

# YES: Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# NO: Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

(В соответствии с Руководством по стилю Google Python для отступов.)

Кроме того, должен ли разрыв строки до или после бинарного оператора?:

# NO: operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)

# YES: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)
Другие вопросы по тегам