Как стилизовать длинные строки в 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)