Как я могу сделать так, чтобы мой код Python не превышал 80 символов в строке?

Я написал несколько Python, в которых некоторые строки превышают 80 символов в длину, что является порогом, под которым я должен оставаться. Как я могу адаптировать мой код, чтобы уменьшить длину строки?

4 ответа

Мой текущий редактор (Kate) был настроен так, чтобы вводить разрыв строки на границах слов всякий раз, когда длина строки достигает или превышает 80 символов. Это сразу делает очевидным, что я перешагнул границы. Кроме того, есть красная линия, обозначающая позицию из 80 символов, что дает мне предварительное предупреждение о том, когда эта строка будет переливаться. Они позволяют мне планировать логические линии, которые будут соответствовать нескольким физическим линиям.

Что касается того, как на самом деле соответствовать им, существует несколько механизмов. Вы можете завершить строку знаком \, но это подвержено ошибкам.

# works
print 4 + \
    2

# doesn't work
print 4 + \ 
    2

Различия? Разница невидима - во втором случае после обратной косой черты был символ пробела. К сожалению!

Что нужно сделать вместо этого? Ну, в скобках.

print (4 + 
    2)

Нет \ нужно. Это на самом деле работает универсально, вам никогда не понадобится \ . Даже для границ доступа к атрибутам!

print (foo
    .bar())

Для строк вы можете добавить их явно или неявно, используя соединение в стиле C.

# all of these do exactly the same thing
print ("123"
    "456")
print ("123" + 
    "456")
print "123456"

Наконец, все, что будет в любой форме скобок ((), []. {}), А не только круглые скобки, может иметь перенос строки где угодно. Так, например, вы можете просто использовать список литералов по нескольким строкам, если элементы разделяются запятой.

Все это и многое другое можно найти в официальной документации по Python. Также, быстрое примечание, PEP-8 определяет 79 символов в качестве предела, а не 80- если у вас есть 80 символов, вы уже превысили его.

Если код, превышающий 80 символов, является вызовом функции (или определением), прервите строку аргумента. Python распознает скобки и видит это как одну строку.

function(arg, arg, arg, arg,
         arg, arg, arg...)

Если код, превышающий 80 символов, является строкой кода, которая не может быть взломана естественным образом, вы можете использовать обратную косую черту \ "убежать" от новой строки.

some.weird.namespace.thing.that.is.long = ','.join(strings) + \
                                          'another string'

Вы также можете использовать скобки в ваших интересах.

some.weird.namespace.thing.that.is.long = (','.join(strings) +
                                           'another string')

Все типы квадратных скобок {} (dict/set), [] (список), () (кортежи) можно без проблем разбить на несколько строк. Это позволяет лучше форматировать.

mydict = {
    'key': 'value',
    'yes': 'no'
}

Я бы добавил два пункта к предыдущим ответам:

Строки могут быть автоматически объединены, что очень удобно:

this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
                         "rest of the string: no string addition is necessary!"
                         " You can do it many times!")

Обратите внимание, что это эффективно: это не приводит к конкатенации строк, вычисляемой при запуске кода: вместо этого это напрямую рассматривается как один длинный строковый литерал, поэтому он эффективен.

Небольшое предостережение, касающееся ответа Девина: синтаксис "скобок" на самом деле не "работает универсально". Например, d[42] = "H22G" нельзя записать как

(d
 [42] = "H2G2")

потому что круглые скобки могут использоваться только вокруг "вычисляемого" выражения (это не включает присваивание (=), как указано выше).

Другим примером является следующий код, который генерирует синтаксическую ошибку:

with (open("..... very long file name .....")
      as input_file):

Фактически, круглые скобки нельзя ставить вокруг утверждений, в более общем смысле (только выражения).

В этих случаях можно использовать синтаксис "\" или, что лучше (поскольку "\" следует избегать, если это возможно), разделить код на несколько операторов.

Идиоматический Питон говорит:

Используйте обратную косую черту в качестве последнего средства

Итак, если использовать скобки () возможно, избегайте обратной косой черты. Если у тебя есть a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states() сделать что-то вроде:

lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()

Или, предпочтительно, рефакторинг вашего кода. Пожалуйста.

Другие вопросы по тегам